【发布时间】:2021-02-19 16:22:29
【问题描述】:
这将是一个冒险的问题,因为对于类似的问题,有许多看似简单的解决方案已经得到解答,但我有一些特定的情况,这使得它们的工作不理想。
没有 pip 的标准 conda 工作流程
使用环境文件安装 conda 环境的标准工作流程是
conda env create -f environment.yml
如果您对安装 Miniconda 的文件夹具有适当的权限,即使没有 root 访问权限也可以正常工作。
使用 pip 的标准 conda 工作流程
一个 environment.yml 可以包含 pip 包。这是通过将 environment.yml 中的包解析为 requirements.txt 文件,然后使用更新和需求标志 (more detail here) 执行 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。
相似问题与相似问题的区别
【问题讨论】: