如何在没有root权限的情况下,在conda中安装pip包?

3
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环境的标准工作流程为:
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访问权限,无法访问正确的文件夹。

临时解决方案

对我有效的是以下两步操作:

  1. 从environment.yml中手动删除pip文件并将其放入requirements.txt中
  2. 执行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。
1个回答

0
如果我能正确理解您的问题。您无法在默认用户目录中安装软件包,因为其中缺少空间。
那么,在使用pip时如何更改安装目录呢?
我以前没有使用过这些参数,但是“pip install --help”告诉我们:
-t, --target <dir>          Install packages into <dir>. By default this will not replace existing files/folders in <dir>. Use --upgrade to replace
--root <dir>                Install everything relative to this alternate root directory.
--prefix <dir>              Installation prefix where lib, bin and other top-level folders are placed
--user                      Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on Windows. (See the
                              Python documentation for site.USER_BASE for full details.)

因此,有许多参数可用于自定义安装路径。也许在使用pip时手动选择您的环境路径可能是解决方案?
此外,您可以尝试更改USER_BASE路径。


pip install --user 可以正常工作,如上所述。我的问题可以通过临时解决方案来解决。我认为我正在寻找一种方法来永久更改 pip 默认安装目录,但仅在 venv 内部,并希望不需要太多额外的工作。 - boomkin
你可以尝试在 venv 中更改 USER_BASE ENV 变量。类似这样的操作:https://mikebarkas.dev/2016/set-environment-variables-activating-virtualenv/ - rzlvmp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接