conda环境配置、pip安装位置问题与解决

conda环境配置、pip安装位置问题与解决

零、踩坑问题汇总

  1. 在conda虚拟环境里使用pip, 并没有安装在虚拟环境目录下, 而是安装到了全局目录下;
  2. Pycharm创建不了conda环境, 点击没反应, 日志里报错CondaPythonLegacy - Can't find python path to use, will use conda run instead;
  3. 多个环境使用相同版本的python, conda默认使用硬链接, site.py文件改动后影响多个虚拟环境。

一、安装与设置记录

  1. 下载安装miniconda

  2. 修改pip源: 在用户目录下新建pip/pip.ini, 内容是

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
  1. 修改conda源: 在用户目录下新建.condarc, 内容参考 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/, 如下
channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
  1. 环境设置

这一步是为了解决在conda环境中使用pip安装位置的问题, 详见下文。

# conda默认使用了hardlink,如果同时使用conda和pip的情况下,我个人建议加上 --copy 选项
conda create --copy -n envname python=3.9 # 建议用普通用户权限执行, env存放位置在用户目录. 否则会装到系统目录下

查看conda环境安装位置

conda config --show # 或 conda info

打开新建环境下的lib文件夹的site.py文件(C:\Users\username\.conda\envs\conda_env\Lib\site.py), 找到USER_SITEUSER_BASE那两行, 默认是None, 修改后如下:

USER_SITE = r"C:\Users\username\.conda\envs\conda_env\Lib\site-packages"
USER_BASE = r"C:\Users\username\.conda\envs\conda_env\Scripts"

记得加上r抑制转义, 否则有可能因为非法转义报错, 导致进入不了虚拟环境。

二、问题与解决

  1. pip将软件包安装在了全局目录?

最初在使用conda时, 我发现在conda环境中使用pip命令, 其安装位置并不是在env里(预期应该在C:\Users\username\.conda\envs\conda_env\Lib\site-packages, 实际却安装到了全局的用户目录下)。

经过一番学习, 我搞明白了这段逻辑:

  • 影响pip安装位置的设置在Lib\site.py文件里, 其中USER_SITEUSER_BASE两个变量分别指向了pip安装位置命令所在目录, 默认是None, 就会找到全局设置。

  • 首次用conda create -n envname python=3.9命令创建虚拟环境时, conda会下载一个对应版本的python3.9放在pkg目录下(C:\Users\username\.conda\pkgs\python-3.9.18-h1aa4202_0), 每次新建该版本的python环境时, 就会从这里继承设置(USER_SITEUSER_BASENone), 导致pip安装位置指向了全局位置。

所以很简单, 把这两个变量改成虚拟环境中的安装位置就好了。

USER_SITE = r"C:\Users\username\.conda\envs\conda_env\Lib\site-packages"
USER_BASE = r"C:\Users\username\.conda\envs\conda_env\Scripts"
  1. Pycharm新建环境没反应, conda create命令也报错, pycharm日志报CondaPythonLegacy - Can’t find python path to use, will use conda run instead ?

因为前面的USER_SITEUSER_BASE反斜杠出现了错误转义, 所以执行到这里就报错了。

这些都正常, 最坑的是pycharm不报错, 一直点击没反应。直到我看了Pycahrm日志, 有一行报错:

CondaPythonLegacy - Can’t find python path to use, will use conda run instead

解决:在那两行修改前面中上r, 抑制转义就好了。

  1. 两个python3.9环境, 共享了同一份site.py?

前面的设置我正常用了很久, 直到后来我建了两个python3.9的环境, 按照惯例也修改env2site.py, 之后神奇地发现修改env2site.py, 另一个env1site.py也跟着变了, 按文件修改记录查了一下, C:\Users\username\.conda\pkgs\python-3.9.18-h1aa4202_0也跟着变了!

怀疑这三个文件是同一个文件。用软件打开看看, 果然是硬链接:

在这里插入图片描述

上conda文档看了看, 确认了就是这个原因。

解决办法:在conda create命令后加上--copy选项, 直接拷贝而不使用链接。

缺点就是占点磁盘。

也不是大问题。

三、总结

我认为这确实是个麻烦, 不知道为什么conda官方不改善一下。

如果conda和pip不混着用, 就没有这些麻烦了, 但现实很多时候不得不混用。

每次创建新环境先手动修改, 记住就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值