conda 虚拟环境中,明明安装好pytorch,但是突然出现不能用的情况

conda虚拟环境 pytorch1_2 中,明明安装好了pytorch,但是今天再进入python环境后,import torch,

出现 no such module "torch",非常诡异。

只好将pytorch卸载重装。

1、进入pytorch1_2 虚拟环境

2、卸载pytorch:

     conda uninstall pytorch

      第一次执行上述命令的时候,系统似乎是更新了一系列的包;尤其发现python更新到了3.7.7

3、安装pytorch:参考我的另一篇博客https://blog.youkuaiyun.com/wangxiaosu0501/article/details/102488465

    conda install pytorch=1.2.0 cudatoolkit=9.2   

    更新:无需指定cudatoolkit,conda会自动匹配 cudatoolkit和cudnn 的版本。

4、再进入python环境,import torch,仍然是 no such module 'torch'

到这里,已经不知该如何处理了,但是发现进入的是python3.7.4的环境,和conda list列出来的python3.7.7的环境有差,估计应该是这里的原因,conda 把pytorch安装在了3.7.7环境下,没有安装在3.7.4下,故进入3.7.4也是无法导入torch的。

如何处理?

就是启动3.7.7的python环境即可。

顺着这个思路,whereis python,列出了pytorch1_2 虚拟环境下,python的包目录,竟然没有发现3.7.7,但是发现了python3.7m,又是无法理解的后缀m,一开始没反应过来,反复卸载、安装pytorch多次,仍然无果。

后有新建了一个虚拟环境 pytorch1_2_1,安装、卸载 pytorch多次,仍然发现每次总是进入python3.7.4的环境,无语;不知道该怎么处理。

后来先回到base,然后再进入pytorch1_2后,竟然命令行输入 python或者python3后,都可以进入 python3.7.7的环境,比较费解,为什么会这样,这中间有什么流程要求。没搞懂,但是进入 python3.7.7后,import torch 正常了。

总归也是解决了问题。

### 如何在 Knife4j 4.x 版本中全局配置请求参数 为了实现 Knife4j 中的全局请求参数配置,可以通过自定义 `OpenAPI` 的扩展功能来完成。具体来说,在 Spring Boot 应用程序中可以利用 `org.springdoc.core.customizers.OpenApiCustomiser` 接口或者直接修改 `springdoc-openapi-ui` 提供的核心对象来进行设置。 以下是具体的解决方案: #### 方法一:通过 OpenApiCustomizer 添加全局参数 可以在项目的配置类中注册一个 Bean 来实现此需求。代码如下所示: ```java import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import org.springdoc.core.customizers.OpenApiCustomiser; import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.oas.models.media.StringSchema; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SwaggerConfig { @Bean public OpenApiCustomiser globalParametersOpenApiCustomiser() { return openApi -> { Parameter tokenParameter = new Parameter() .in("header") // 参数位置 header/query/path/body/formData .name("Authorization") // 参数名称 .description("登录令牌") // 描述信息 .required(false) // 是否必填 .schema(new StringSchema().defaultValue("Bearer ")); // 默认值和数据类型 if (openApi.getPaths() != null) { openApi.getPaths().values().forEach(pathItem -> pathItem.readOperationsMap().values().forEach(operation -> { operation.addParametersItem(tokenParameter); })); } }; } @Bean public OpenAPI springShopOpenAPI() { return new OpenAPI() .info(new Info().title("Spring API 文档").version("v1")); } } ``` 上述方法会为所有接口自动添加名为 `Authorization` 的头部参数[^2]。 --- #### 方法二:基于 Global Operation Customization 实现 如果需要更灵活的方式,则可以直接继承并重写 `OperationCustomizer` 类中的逻辑。这种方式允许开发者针对特定路径或 HTTP 方法应用不同的规则。 示例代码片段如下: ```java @Bean public OperationCustomizer customGlobalHeader() { return (operation, context) -> { Parameter parameter = new Parameter(); parameter.setName("X-Tenant-ID"); parameter.setIn(Parameter.In.HEADER.toString()); parameter.setDescription("租户ID"); parameter.setRequired(true); operation.addParametersItem(parameter); }; } ``` 这种方法同样适用于大多数场景下的全局参数注入问题[^3]。 --- #### 注意事项 当引入新的依赖库时,请确保所使用的版本兼容当前项目环境(例如 Java Jakarta EE 平台)。对于 Spring Boot 3.x 用户而言,推荐选用支持 Jakarta EE 的 knife4j 组件版本号如 `knife4j-openapi3-jakarta-spring-boot-starter` [^1]。 此外需要注意的是,某些特殊情况下可能还需要调整 YAML 文件内的属性声明部分以适配额外的功能选项。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值