ChatGPT解决这个技术问题 Extra ChatGPT

将 pip 包安装到 $HOME 文件夹

可能吗?安装 pip 时,将 python 包安装在我的 $HOME 文件夹中。 (例如,我想安装 mercurial,使用 pip,但在 $HOME 内部而不是 /usr/local

我使用的是 mac 机器,只是想到了这种可能性,而不是“污染”我的 /usr/local,而是使用我的 $HOME

PEP370 正是关于这一点。只是创建一个 ˜/.local 并执行一个 pip install package 足以使这些软件包仅安装在我的 $HOME 文件夹中吗?

你检查过virtualenv吗?您可以在隔离环境中使用 pip 安装软件包。
我想过,但我想使用现有的 python (2.6.1) 安装一些 python 应用程序,但不是安装在 /usr/local/,而是安装在我的 $HOME 文件夹中并将其添加到 $PATH。我想知道这是否可能,以及这种方法的任何注意事项。
+1 用于推广 PEP370。这是一个简单但有用的选项,应该让更多人知道。
我正在与类似的问题作斗争(可能是由于两个不同 pyhton 的 pip 和 easy_install 配置错误引起的)。作为最后的手段,我尝试使用普通的 $ python setup.py --user install。它奏效了。软件包现在安装在 home 子目录中,并且所有工作都按预期进行。将不得不与我的服务器管理员交谈。
如果您需要安装 PIP,只需执行 wget https://bootstrap.pypa.io/get-pip.py 后跟 python get-pip.py 之类的操作即可。如果您在安装的 PIP 太旧的机器上(对我来说就是这种情况),可能会很有用。有关详细信息,请参阅 pip.readthedocs.org/en/latest/installing.html

H
Hugo Tavares

虽然您可以使用 virtualenv,但您不需要这样做。诀窍是将 PEP370 --user 参数传递给 setup.py 脚本。使用最新版本的 pip,一种方法是:

pip install --user mercurial

这应该会导致 hg 脚本安装在 $HOME/.local/bin/hg 中,而 hg 包的其余部分安装在 $HOME/.local/lib/pythonx.y/site-packages/ 中。

请注意,上述情况适用于 Python 2.6。 Python 核心开发人员中有一个关于在 Mac OS X 上安装 PEP370 样式 user 的适当目录位置的问题bit of controversy。在 Python 2.7 和 3.2 中,Mac OS X 上的位置从 $HOME/.local 更改为 $HOME/Library/Python。这可能会在未来的版本中改变。但是,目前,在 2.7(和 3.2,如果 Python 3 支持 hg)上,上述位置将是 $HOME/Library/Python/x.y/bin/hg$HOME/Library/Python/x.y/lib/python/site-packages


好点子。不幸的是,Python 2.7 中有一个错误导致 PYTHONUSERBASE 在 OS X 框架构建中被忽略。它将在 Python 2.7.3 中修复。
这看起来非常有趣。 easy_install 默认安装在 Mac OS X 中,所以我只会将 pip 安装在 $HOME 文件夹之外。
我试图将 PYTHONUSERBASE 更改为另一个位置。没有成功。这具体是如何在 Windows 上完成的?
请注意,如果您执行此操作然后尝试使用 conda 环境,则安装在 .local 中的文件将始终首先被命中,这可能导致很难追踪导入错误。
请注意,在 OSX 上,用户站点目录的 bin 文件夹不在 PATH 上。这意味着除非您export PATH=$PATH:~/Library/Python/X.Y/bin/,否则用户站点目录中的软件包安装的脚本将无法执行。
R
Ross Patterson

我会在你的 HOME 目录中使用 virtualenv。

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

然后,您还可以更改 ~/.(login|profile|bash_profile),以适合您的 shell 将 ~/bin 添加到您的 PATH 中,然后 pip|python|easy_install 将成为默认使用的那个。


执行此操作的“事实上” 方式是virtualenv venvsource venv/bin/activate。您可能不一定希望始终使用您的 virtualenv,并且通过使用此方法,您在使用时会以 (venv) 为前缀。
@nyuszika7h 我们知道如何使用 virtualenv。但这确实回答了这个问题,并且是一个非常巧妙的解决方案。
@itsafire 谁是“我们”?我建议您阅读en.wikipedia.org/wiki/Weasel_word
无论如何,我不同意,这不是一个“整洁的解决方案”。这是一个毫无意义的黑客行为。
F
Foivos

您可以指定 -t 选项 (--target) 来指定目标目录。有关详细信息,请参阅 pip install --help。这是您需要的命令:

pip install -t path_to_your_home package-name

例如,为了安装 mxnet,在我的 $HOME 目录中,我键入:

pip install -t /home/foivos/ mxnet

收到错误 distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base。这是什么意思?
检查 github.com/pypa/pip/issues/3826 以了解相关讨论。我对此一无所知,但我从未在我的环境中遇到过问题。
T
Timo

从其他答案中提取的两个问题的简短答案

是的

可以将 pip 包安装到 $HOME 而不是 /usr/local/lib/,但是

mkdir ˜/.local # then
pip install package 

是不足够的。

你需要

pip install package --user

并且软件包被安装到

/home/user/.local/lib/python3.x/site-packages

不需要 --user 时的异常

如果您不是 root 用户

在 Debian 和 Wsl 上 - Windows 子系统 Linux 没有通知

在 Ubuntu 20.04 上,请注意默认为用户安装,因为普通站点包不可写 - 默认配置是 /usr/lib 对除 root 以外的其他用户不可写