【问题标题】:Installing pip packages to $HOME folder将 pip 包安装到 $HOME 文件夹
【发布时间】:2011-10-31 20:48:21
【问题描述】:

有可能吗?安装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 了解更多信息。

标签: python pip


【解决方案1】:

虽然您可以使用 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 核心开发人员中有一个bit of controversy,关于在 Mac OS X 上用于 PEP370 样式的user 安装的适当目录位置是什么。在 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 中,所以我只会在 $HOME 文件夹之外安装 pip。
  • 我试图将 PYTHONUSERBASE 更改为另一个位置。没有成功。这具体是如何在 Windows 上完成的?
  • 请注意,如果您这样做然后尝试使用 conda 环境,安装在.local 中的文件将始终首先被命中,这可能导致很难追踪导入错误。
  • 请注意,在 OSX 上,用户站点目录的 bin 文件夹不在 PATH 上。这意味着除非您export PATH=$PATH:~/Library/Python/X.Y/bin/,否则用户站点目录中的软件包安装的脚本将无法执行。
【解决方案2】:

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

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

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

【讨论】:

  • 做到这一点的“事实上”方法是virtualenv venv, source venv/bin/activate。您可能不一定希望始终使用您的 virtualenv,并且通过使用此方法,您的提示符会在您使用它时以 (venv) 为前缀。
  • @nyuszika7h 我们知道如何使用 virtualenv。但这确实回答了问题,并且是一个非常巧妙的解决方案。
  • @itsafire “我们”是谁?我建议你阅读en.wikipedia.org/wiki/Weasel_word
  • 无论如何,我不同意,这不是一个“整洁的解决方案”。这是一个毫无意义的黑客攻击。
【解决方案3】:

您可以指定-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 进行相关讨论。我对此一无所知,但我从未在我的环境中遇到过问题。
【解决方案4】:

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

一个

是的

可以将 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用户
  • DebianWsl 上 - Windows 子系统 Linux 没有通知
  • 在 Ubuntu 20.04 上 通知 default to user installation because normal site-packages not writeable - 默认配置为 /usr/lib 除 root 以外的其他用户不可写入

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 2013-02-08
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2021-09-30
    相关资源
    最近更新 更多