【问题标题】:How to install pip packages in conda without root privilege?如何在没有 root 权限的情况下在 conda 中安装 pip 包?
【发布时间】: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 访问权限,而在我的情况下,该路径无法访问正确的文件夹。

临时解决方案

对我有用的是两步程序:

  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

【问题讨论】:

    标签: python pip conda


    【解决方案1】:

    如果我能正确理解您的问题。您不能在默认用户目录中安装软件包,因为其中空间不足。

    那么当你使用 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 内部,希望不会有太多额外的工作。
    • 您可以尝试在 venv 中更改 USER_BASE ENV 变量。类似mikebarkas.dev/2016/…
    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2011-04-13
    • 2015-11-12
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多