This will be a risky question because there are many seemingly easy solutions to similar problems which have already been answered but there are specific circumstances that I have, which makes them work non-ideally.
标准的conda工作流程不需要pip。
使用环境文件安装conda环境的标准工作流程为:
如果您在安装Miniconda的文件夹中拥有适当的权限,即使没有root访问权限,这也可以正常运行。
使用pip的标准conda工作流程
environment.yml可以包含pip软件包。这是通过将环境.yml中的软件包解析为requirements.txt文件,并使用更新和要求标志(更多详细信息请参见此处)执行pip子进程来实现的。
这在大多数情况下都很好用,conda的pip会安装相关软件包。但是,如果您缺少所需的特权,则可能会出现问题,例如,在环境内运行pip install package_name:
通过内部调用pip install --user而不是普通的pip install来安装软件包。
类似的问题和与类似问题的区别:
- this - 自那以后,conda的行为已经改变,并且这不是访问权限的问题。 - this - 只涉及pip而不涉及conda。
标准的conda工作流程不需要pip。
使用环境文件安装conda环境的标准工作流程为:
conda env create -f environment.yml
如果您在安装Miniconda的文件夹中拥有适当的权限,即使没有root访问权限,这也可以正常运行。
使用pip的标准conda工作流程
environment.yml可以包含pip软件包。这是通过将环境.yml中的软件包解析为requirements.txt文件,并使用更新和要求标志(更多详细信息请参见此处)执行pip子进程来实现的。
这在大多数情况下都很好用,conda的pip会安装相关软件包。但是,如果您缺少所需的特权,则可能会出现问题,例如,在环境内运行pip install package_name:
File "/secret_path_to_conda/miniconda3/envs/cheese/lib/python3.6/site-packages/pip/_internal/utils/unpacking.py", line 105, in set_extracted_file_to_default_mode_plus_executable
os.chmod(path, (0o777 & ~current_umask() | 0o111))
因为我的情况下没有对该路径进行必要的777访问权限,无法访问正确的文件夹。
临时解决方案
对我有效的是以下两步操作:
- 从environment.yml中手动删除pip文件并将其放入requirements.txt中
- 执行pip install --user requirements.txt
这将把pip二进制文件安装到一个地方(~/.local/bin),在那里我有所需的访问权限,这个方法可行。自然而然地,我为什么不把整个Miniconda安装在那个位置呢?这样我就不会有访问问题了。这个解决方案已经出现在我的脑海中,但问题是我在那个位置只有8GB的空间,这对于我多个项目的conda依赖关系来说是不够的。
我想要什么?
理想情况下,希望有其他命令可以替代以上操作。
conda env create -f environment.yml
通过内部调用pip install --user而不是普通的pip install来安装软件包。
类似的问题和与类似问题的区别:
- this - 自那以后,conda的行为已经改变,并且这不是访问权限的问题。 - this - 只涉及pip而不涉及conda。