我知道最明显的答案是使用virtualenv和virtualenvwrapper,但由于各种原因,我不能/不想这样做。
那么如何修改命令呢
pip install package_name
让PIP在默认的site-packages之外的地方安装这个包?
我知道最明显的答案是使用virtualenv和virtualenvwrapper,但由于各种原因,我不能/不想这样做。
那么如何修改命令呢
pip install package_name
让PIP在默认的site-packages之外的地方安装这个包?
当前回答
System选项,将PIP package-bins安装到所有用户都可以访问的/usr/local/bin。没有这个选项的安装可能对所有用户都不起作用,因为东西会到用户特定的目录,如$HOME/。Local /bin,然后是用户特定的安装,必须对所有用户重复,如果不为用户设置,也可能有路径问题,那么垃圾箱将无法工作。所以如果你正在寻找所有的用户-你需要有sudo访问:
sudo su -
python3 -m pip install --system <module>
logout
log back in
which <module-bin> --> it should be installed on /usr/local/bin/
其他回答
再加上已经很好的建议,因为当我没有对/usr/local的写权限时,我在安装IPython时遇到了问题。
PIP使用distutils来进行安装,本线程讨论了这是如何导致问题的,因为它依赖于sys。前缀设置。
我的问题发生在IPython安装试图写入'/usr/local/share/man/man1'时,而Permission被拒绝。由于安装失败,似乎没有在bin目录中写入IPython文件。
使用“——user”可以工作,文件被写入~/.local。添加~ /。local/bin到$PATH意味着我可以从那里使用“ipython”。
但是,我正在尝试为一些用户安装这个,并且已经获得了对/usr/local/lib/python2.7目录的写权限。我在那里创建了一个“bin”目录,并为distutils设置指令:
vim ~/.pydistutils.cfg
[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin
然后(-I用于强制安装,尽管之前失败了/。本地安装):
pip install -I ipython
然后我将/usr/local/lib/python2.7/bin添加到$PATH中。
我想我应该包括这个,以防其他人在他们没有sudo访问的机器上有类似的问题。
似乎没有人提到-t选项,但最简单的是:
pip install -t <direct directory> <package>
安装Python包通常只包含一些纯Python文件。如果包包含数据、脚本和(或)可执行文件,则这些文件将安装在与纯Python文件不同的目录中。
假设你的包没有数据/脚本/可执行文件,并且你希望你的Python文件进入/ Python /packages/package_name(而不是像使用——prefix时那样在/ Python /packages下面几层的子目录),你可以使用one time命令:
pip install --install-option="--install-purelib=/python/packages" package_name
如果你想要所有(或大部分)你的包都在那里,你可以编辑你的~/.pip/pip.conf包含:
[install]
install-option=--install-purelib=/python/packages
这样,您就不会忘记必须一次又一次地指定它。
包中包含的任何可执行文件/数据/脚本仍然会放在默认位置,除非你指定了额外的安装选项(——prefix/——install-data/——install-scripts等,详情请参阅自定义安装选项)。
为了将库安装在我想要的位置,我导航到我想要的带有终端的目录的位置
pip install mylibraryName -t .
我的逻辑是从这一页:https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
而不是——target或——install-options选项,我发现设置PYTHONUSERBASE环境变量工作得很好(来自关于这个问题的bug的讨论):
PYTHONUSERBASE=/path/to/install/to pip install --user
(或者在运行命令之前设置环境中的PYTHONUSERBASE目录,使用export PYTHONUSERBASE=/path/to/install/to)
这使用了非常有用的——user选项,但告诉它在自定义前缀下创建bin、lib、share和其他目录,而不是$HOME/.local。
然后,您可以将其添加到您的PATH、PYTHONPATH和其他变量中,就像将其添加到正常的安装目录中一样。
注意,如果依赖于的任何包需要在PYTHONUSERBASE目录中安装新版本,以覆盖系统提供的版本,则可能还需要指定——upgrade和——ignore-installed选项。
完整的例子
PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy
..将最新版本的scipy和numpy包安装到一个目录中,然后你可以像这样将该目录包含在PYTHONPATH中(本例中使用bash和CentOS 6上的python 2.6):
export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH
使用virtualenv仍然是一个更好、更整洁的解决方案!