题
我知道明显的答案是使用Virtualenv和virtualenvwrapper,但是由于各种原因,我不能/不想这样做。
那么如何修改命令
pip install package_name
制作 pip
将软件包安装在默认设置以外的地方 site-packages
?
解决方案
采用:
pip install --install-option="--prefix=$PREFIX_PATH" package_name
您可能还想使用 --ignore-installed
强制使用此新前缀重新安装所有依赖项。您可以使用 --install-option
多次添加您可以使用的任何选项 python setup.py install
(--prefix
可能是您想要的,但是您可以使用更多选项)。
其他提示
这 - 目标 切换是您要寻找的东西:
pip install --target=d:\somewhere\other\than\the\default package_name
但是您仍然需要添加 d:\somewhere\other\than\the\default
到 PYTHONPATH
实际上是从该位置使用它们。
-t, - 目标u003Cdir>
将软件包安装到中u003Cdir>。默认情况下,这不会替换现有的文件/文件夹u003Cdir>。
使用 - 升级以替换现有软件包中的现有软件包u003Cdir>使用新版本。
升级PIP如果目标开关不可用:
在Linux或OS X上:
pip install -U pip
在Windows上(这可以解决 一个问题):
python -m pip install -U pip
而不是 --target
选项或 --install-options
选项,我发现以下内容效果很好(从讨论有关此事情的错误的讨论 https://github.com/pypa/pip/issues/446):
PYTHONUSERBASE=/path/to/install/to pip install --user
(或设置 PYTHONUSERBASE
运行命令之前,您的环境中的目录,使用 export PYTHONUSERBASE=/path/to/install/to
)
这使用了非常有用的 --user
选项,但告诉它 bin
, lib
, share
以及您期望在自定义前缀而不是期望的其他目录 $HOME/.local
.
然后,您可以将其添加到您的 PATH
, PYTHONPATH
以及其他变量,就像您将使用普通的安装目录一样。
请注意,您可能还需要指定 --upgrade
和 --ignore-installed
选项,如果任何依赖的软件包都需要安装较新的版本 PYTHONUSERBASE
目录,覆盖系统提供的版本。
一个完整的示例:
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仍然是一个更好,更整洁的解决方案!
安装Python软件包通常只包含一些纯Python文件。如果包装包含数据,脚本和或可执行文件,则这些包装是从纯Python文件中安装在不同目录中的。
假设您的软件包没有数据/脚本/可执行文件,并且您希望您的Python文件进入 /python/packages/package_name
(而不是某些子目录以下几个级别 /python/packages
如使用时 --prefix
),您可以使用一个时间命令:
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/googleclecloudstorageclient/download
似乎没有人提到-t选项,但最简单的选择:
pip install -t <direct directory> <package>
只需在@ian Bicking的答案中添加一个点:
使用 --user
如果要在远程服务器上将某些Python软件包安装到一个人的主目录中(没有Sudo用户权利),则可以指定已安装目录的选项。
例如,
pip install --user python-memcached
该命令将将软件包安装到您的PythonPath中列出的目录之一中。
较新的版本 pip
(8或以后)可以直接使用 --prefix
选项:
pip install --prefix=$PREFIX_PATH package_name
在哪里 $PREFIX_PATH
是放置LIB,BIN和其他顶级文件夹的安装前缀。
用Python3.5和PIP 9.0.3测试了这些选项:
PIP安装 - 目标 /myFolder [软件包
安装所有软件包,包括依赖依赖 /myFolder。没有考虑到python其他地方已经安装了依赖的软件包。您会从 /myFolder /[package_name]找到包装。如果您有多个Python版本,则不会考虑到这一点(包装夹名称中没有Python版本)。
PIP安装 - prefix /myFolder [软件包
检查是已经安装的依赖项。将安装软件包到/myfolder/lib/python3.5/site-packages/ [packages
PIP安装 - 根 /myFolder [软件包
检查依赖项,例如-prefix,但安装位置将为/米福德/usr/local/lib/python3.5/site-packages/ [package_name]。
PIP安装 - 用户[软件包
将在$ HOME中安装软件包:/home/ [user ]/.local/lib/python3.5/site-packages python从此.Local路径自动搜索python,因此您无需将其放在Pythonpath上。
=>在大多数情况下 - 使用者是使用的最佳选择。如果由于某种原因而无法使用主文件夹,那么-prefix。
pip install packageName -t pathOfDirectory
或者
pip install packageName --target pathOfDirectorty
为了增加已经很好的建议,因为我已经安装了一个问题 ipython 当我没有写权时 /usr/local
.
PIP使用distutils进行安装和 这个线程 讨论如何引起问题,因为它依赖于 sys.prefix
环境。
当ipython安装尝试写入'/usr/local/share/man/man1'时,我的问题发生了 没有权限. 。由于安装失败,因此似乎没有在bin目录中写入ipython文件。
使用“ - 用户”工作,并将文件写入〜/.local。在$路径中添加〜/.local/bin意味着我可以从那里使用“ ipython”。
但是,我正在尝试为许多用户安装此操作 /usr/local/lib/python2.7
目录。我在那里创建了一个“垃圾箱”目录,并为Distutils设置了指令:
vim ~/.pydistutils.cfg
[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin
然后 (-I
尽管以前的失败/.Local安装)被用来强制安装:
pip install -I ipython
然后我添加了 /usr/local/lib/python2.7/bin
到 $PATH
.
我以为我会在没有Sudo访问的机器上遇到类似问题的其他任何问题。
不幸的是,如果您将brew与Python一起使用,则PIP/PIP3船舶的选项非常有限。您没有如上所述的安装选项, - 目标, - 用户选项。
笔记 在PIP安装 - 用户
普通的PIP安装 - 用户用于酿造的Python。这是因为distutils中的错误,因为自制的distrutils.cfg写下了包装前缀。可能的解决方法(将可执行脚本放入〜/library/python/./ bin中)是:python -m pip install --user --install-option="--prefix=" <package-name>
您可能会发现这条线很麻烦。我建议将Pyenv用于管理。如果您正在使用
brew upgrade python python3
具有讽刺意味的是你实际上是 降级 PIP功能。
(我发布此答案,仅仅是因为我的Mac OSX中的PIP没有 - 目标选项,而我花了几个小时来修复它)
pip install /path/to/package/
现在有可能。
与此的区别以及使用 -e
或者 --editable
标志就是这样 -e
链接到保存软件包的位置(即您的下载文件夹),而不是将其安装到Python路径中。
这意味着,如果您将软件包删除/将软件包移至另一个文件夹,则将无法使用它。
与pip v1.5.6
在Python上 v2.7.3
(gnu/linux),选项 --root
允许指定全局安装前缀,(显然)无论特定软件包的选项如何。尝试fi,
$ pip install --root=/alternative/prefix/path package_name
我建议遵循文档并创建〜/.pip/pip.conf文件。注意文档中缺少指定的标头目录,这导致以下错误:
error: install-base or install-platbase supplied, but installation scheme is incomplete
Conf File的完整工作内容是:
[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data
不幸的是,我可以安装,但是当尝试卸载PIP告诉我没有用于卸载过程的软件包时。