那么我该如何修改命令?
pip install package_name
如何让 pip
将包安装到除默认的 site-packages
之外的其他地方?
你需要的是--target开关:
pip install --target=d:\somewhere\other\than\the\default package_name
但是您仍然需要将d:\somewhere\other\than\the\default
添加到PYTHONPATH
中,才能从该位置实际使用它们。
-t,--target <dir>
将软件包安装到<dir>中。默认情况下,这不会替换<dir>中的现有文件/文件夹。
使用--upgrade将<dir>中的现有软件包替换为新版本。
如果目标开关不可用,请升级pip:
在Linux或OS X上:
pip install -U pip
对于Windows系统(这是解决问题的方法):
python -m pip install -U pip
pip install --upgrade pip
以升级pip。 - r3m0ttarget
是pip的一个选项,install-option
中的所有内容都将传递给 setup.py install
命令。基本上 target
是一个自定义的site-packages位置。 - Janusz Skonieczny--target
可能会导致部分安装,因为它不会在指定的前缀中安装任何包括脚本或数据文件。似乎通过使用 --install-option
传递 --prefix
是唯一正确的方法来完全控制所使用的安装前缀。 - Kenneth Hoste使用:
pip install --install-option="--prefix=$PREFIX_PATH" package_name
你可能还想使用 --ignore-installed
来强制重装所有依赖项,使用这个新的前缀。你可以使用 --install-option
多次添加任何你可以在 python setup.py install
中使用的选项(--prefix
可能是你想要的,但你也可以使用一堆其他选项)。
pip freeze
命令看到备用目录? - RussPYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze
的命令,它就能看到这些包。 - Ian Bicking--prefix=$PREFIX_PATH
似乎不能完全控制安装目录,因为系统会在其后添加特定的后缀(例如在Windows上为\Lib\site-packages
)。有没有一种方法可以指定具体的目录? - Piotr DobrogostPYTHONUSERBASE
环境变量与 pip 的 --user
选项结合使用,确保所有内容正确安装到指定的前缀中,但我的答案还没有像 --target
建议一样受到那么多关注。 - David Gardner与--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 仍是更好、更整洁的解决方案!
/bin
文件夹由 pip 创建,--user
和 --PREFIX
命令也会创建它,但 --target
命令不会创建。这个文件夹有多重要? - Jonathan--editable
和本地安装兼容。 - mdhgoogle
目录的目录添加到PYTHONPATH中时,import google.protobuf
会报错。但是PYTHONUSERBASE可以正常工作! - Tomaspip install mylibraryName -t .
我从这个页面中获取了逻辑:https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
安装Python包通常只包含一些纯Python文件。如果包含数据、脚本或可执行文件,则这些文件将安装在不同的目录中,与纯Python文件分开。
假设您的包没有数据/脚本/可执行文件,并且您希望将Python文件放入/python/packages/package_name
中(而不是像使用--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
等),否则包中包含的任何可执行文件/数据/脚本仍将进入其默认位置。有关详细信息,请参见自定义安装选项。--prefix
,因为我在共享服务器上有一个“本地”目录在主目录中,并且在我转移到 pip
之前,它被用作前缀。系统 $PATH
和 $PYTHONPATH
已经配置好了。除了 install-option=--install-purelib=/blah
,还有这个更新的 target=/blah
选项/开关。这也很好,但有时你只需要一个替代 --prefix
的东西,就像你会在 setup.py
或 easy_install
中使用的那样。 - Tomasz Gandor使用python3.5和pip 9.0.3测试了以下选项:
pip install --target /myfolder [packages]
安装所有包及其依赖项到/myfolder下。不考虑依赖包已在Python的其他位置安装的情况。您将在/myfolder/[package_name]中找到包。如果您有多个Python版本,则此选项不会考虑该问题(包文件夹名称中不包含Python版本)。
pip install --prefix /myfolder [packages]
检查依赖项是否已安装。将程序包安装到/myfolder/lib/python3.5/site-packages/[packages]中。
pip install --root /myfolder [packages]
像--prefix一样检查依赖关系,但是安装位置将为/myfolder/usr/local/lib/python3.5/site-packages/[package_name]。
pip install --user [packages]
将程序包安装到$HOME中: /home/[USER]/.local/lib/python3.5/site-packages Python会自动从这个.local路径搜索,因此您无需将其添加到PYTHONPATH中。
=> 在大多数情况下,使用--user是最佳选择。 如果由于某种原因无法使用home文件夹,则使用--prefix。
$PYTHONUSERBASE
中设置目录,以安装 --user
安装的软件包。使用 --user
和设置 $PYTHONUSERBASE
与使用 --prefix
和设置 $PYTHONPATH
有什么区别吗? - Seppo Enarvipip install "package_name" -t "target_dir"
来源 - https://pip.pypa.io/en/stable/reference/pip_install/
-t开关 = 目标
似乎没有人提到-t选项,但这是最简单的方法:
pip install -t <direct directory> <package>
-t
选项是 --target
选项的简写,该选项已在另一个答案中进行了描述 (https://dev59.com/jnE85IYBdhLWcg3wKwKD#19404371) :) - MattiSGpip install packageName -t pathOfDirectory
或者
pip install packageName --target pathOfDirectorty
在 @Ian Bicking 的回答中再补充一点:
如果想要在远程服务器上安装某个Python包到自己的主目录(没有sudo用户权限),可以使用--user
选项指定已安装的目录。
例如,
pip install --user python-memcached
该命令将把软件包安装到在你的PYTHONPATH中列出的目录之一。
pip
不尝试从非自定义目录中删除旧版本。例如 - 系统范围内的一个目录,您没有写入权限。到目前为止,我只能使用easy_install
完成此操作... - Tomasz Gandor--ignore-installed
选项应该可以防止pip尝试卸载已安装的软件包。 - Piotr Dobrogost