使用pip将Python包安装到不同的目录中?

Mon*_*lik 394 python pip

我知道明显的答案是使用virtualenv和virtualenvwrapper,但出于各种原因我不能/不想这样做.

那么我该如何修改命令呢

pip install package_name
Run Code Online (Sandbox Code Playgroud)

使pip安装默认值以外的包某处site-packages

Jan*_*zny 465

--target开关是你正在寻找的东西:

pip install --target = d:\ somewhere\other\than\the\default package_name

但是你仍然需要添加d:\somewhere\other\than\the\defaultPYTHONPATH实际从该位置使用它们.


如果目标交换机不可用,则升级pip:

在Linux或OS X上:

pip install --target=d:\somewhere\other\than\the\default package_name
Run Code Online (Sandbox Code Playgroud)

在Windows上(这解决了一个问题):

pip install -U pip
Run Code Online (Sandbox Code Playgroud)

  • 这是真正的答案,只是在接受的答案之后添加了相当多的选项. (12认同)
  • 使用`--target`可能会导致部分安装,因为它不会安装任何包含指定前缀的脚本/数据文件.似乎传递带有`--install-option`的`--prefix`是完全控制使用的安装前缀的唯一正确方法. (9认同)
  • @DanH运行`pip install --upgrade pip`! (7认同)
  • `target`是一个pip选项,你在`install-option`中放入的所有内容都将被传递给`setup.py install命令`.基本上`target`是自定义站点包位置. (6认同)
  • @Ian Bicking提到的`--install-option =" - prefix = $ PREFIX_PATH"和`--target = $ PATH`选项有什么区别? (5认同)
  • 请注意,同时使用`--editable`时不支持`--target` - https://github.com/pypa/pip/issues/562 (3认同)
  • 点1.5.4说--target'没有这样的选择' (2认同)
  • @Arthur在这种情况下,请使用--ignore-installed选项。 (2认同)

Ian*_*ing 319

使用:

pip install --install-option="--prefix=$PREFIX_PATH" package_name
Run Code Online (Sandbox Code Playgroud)

您可能还希望--ignore-installed使用此新前缀强制重新安装所有依赖项.您可以--install-option多次使用来添加可以使用的任何选项python setup.py install(--prefix可能是您想要的,但您可以使用更多选项).

  • 4年前回答不错,但现在存在--target选项. (64认同)
  • pip freeze看起来在路径上,所以如果你喜欢'PYTHONPATH = $ PREFIX_PATH/lib/python2.6/site-packages pip freeze`,它应该会看到它们. (6认同)
  • 如果你这样做,有没有办法让`pip freeze`看到备用目录? (5认同)
  • 使用`--prefix = $ PREFIX_PATH`似乎不允许完全控制安装目录,因为附加了系统特定的后缀(例如,Windows上的`\ Lib\site-packages`).有没有办法指定具体的目录? (4认同)
  • @Piotr:是的,请参阅我的答案。使用 '--prefix' 有点粗糙,但是如果您希望纯 python 位于 /usr/lib/pythonX.Y/site-packages 而不是 /usr/local/lib/pythonX.Y/site- 下,则效果很好包。 (2认同)
  • `PYTHONUSERBASE` 环境变量与 pip `--user` 选项相结合,确保所有内容都正确安装到指定的前缀中,但我的答案还没有像这个和 `--target` 建议那样受到人们的喜爱。 (2认同)

Dav*_*ner 66

而不是--target选项或--install-options选项,我发现以下工作正常(在https://github.com/pypa/pip/issues/446上讨论关于这个问题的bug ):

PYTHONUSERBASE=/path/to/install/to pip install --user
Run Code Online (Sandbox Code Playgroud)

(或者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
Run Code Online (Sandbox Code Playgroud)

..将最新版本安装scipynumpy打包到一个目录中,然后可以将其包含在您的目录中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
Run Code Online (Sandbox Code Playgroud)

使用virtualenv仍然是一个更好,更整洁的解决方案!

  • 这适用于在Docker容器上运行的Travis CI,而--install-option =" - prefix = $ PREFIX_PATH"解决方案没有. (2认同)
  • 这个选项对于以超级用户身份为另一个非 root 用户安装软件包非常方便,而不必使用 `su`(例如,这在容器中可能有问题)。 (2认同)

Ant*_*hon 43

安装Python包通常只包含一些纯Python文件.如果程序包包含数据,脚本和/或可执行文件,则这些程序包安装在与纯Python文件不同的目录中.

假设您的软件包没有数据/脚本/可执行文件,并且您希望Python文件进入/python/packages/package_name(而不是/python/packages使用下面几个级别的某个子目录--prefix),您可以使用一次性命令:

pip install --install-option="--install-purelib=/python/packages" package_name
Run Code Online (Sandbox Code Playgroud)

如果您想要所有(或大部分)包裹去那里,您可以编辑您~/.pip/pip.conf的包括:

[install]
install-option=--install-purelib=/python/packages
Run Code Online (Sandbox Code Playgroud)

这样你就不会忘记必须一次又一次地指定它.

除非您指定添加安装选项(--prefix/ --install-data/ --install-scripts等,详细信息请查看自定义安装选项),否则程序包中包含的任何excecutable/data/scripts仍将转到其默认位置.

  • 配置文件的一大优点。我个人在那里指定了`--prefix`,因为我在主目录中的共享服务器上有一个“本地”目录,并且在我移动到`pip`之前它被`easy_install`用作前缀。系统 `$PATH` 和 `$PYTHONPATH` 之前已配置。代替 `install-option=--install-purelib=/blah` 的是这个更新的 `target=/blah` 选项/开关。它也很好,但有时您只需要替换“--prefix”,即可与“setup.py”或“easy_install”一起使用。 (2认同)

小智 30

为了将库安装到我想要的地方,我导航到了我希望目录与终端然后使用的位置

pip install mylibraryName -t . 
Run Code Online (Sandbox Code Playgroud)

我从这个页面采取的逻辑:https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download

  • `-t`是`--target`的简写 (9认同)

Sam*_*ape 20

pip3 install "package_name" -t "target_dir"
Run Code Online (Sandbox Code Playgroud)

来源 - https://pip.pypa.io/en/stable/reference/pip_install/

-t 开关 = 目标


Erw*_*wan 18

似乎没有人提到-t选项,但最简单:

pip install -t <direct directory> <package>
Run Code Online (Sandbox Code Playgroud)

  • `-t`选项是`--target`选项的简短版本,已在另一个答案中描述(/sf/answers/1358306001/):) (6认同)

Goo*_*ill 14

只需在@Ian Bicking的答案中添加一点:

--user如果想要在远程服务器上将某个Python包安装到一个主目录(没有sudo用户权限),则使用指定安装目录的选项也可以使用.

例如,

pip install --user python-memcached
Run Code Online (Sandbox Code Playgroud)

该命令会将程序包安装到PYTHONPATH中列出的某个目录中.


Mik*_*e T 13

较新版本的pip(8或更高版本)可以直接使用该--prefix选项:

pip install --prefix=$PREFIX_PATH package_name
Run Code Online (Sandbox Code Playgroud)

这里$PREFIX_PATH是其中lib,bin和其他顶级文件夹放置安装前缀.


Mik*_*kko 12

使用python3.5和pip 9.0.3测试了这些选项:

pip install --target / myfolder [程序包]

在/ myfolder下安装所有软件包,包括依赖项。不考虑依赖包已在Python中的其他位置安装。您可以从/ myfolder / [package_name]中找到软件包。如果您有多个Python版本,则无需考虑(软件包文件夹名称中没有Python版本)。

pip install --prefix / myfolder [软件包]

检查是否已安装依赖项。将安装包到/myfolder/lib/python3.5/site-packages/[packages]

pip install --root / myfolder [软件包]

检查--prefix之类的依赖项,但是安装位置将为/myfolder/usr/local/lib/python3.5/site-packages/[package_name]。

pip install --user [软件包]

会将软件包安装到$ HOME中:/home/[USER]/.local/lib/python3.5/site-packages Python会自动从此.local路径搜索,因此您无需将其放入PYTHONPATH。

=>在大多数情况下,--user是最佳选择。如果由于某种原因无法使用主文件夹,请使用--prefix。


小智 9

pip install packageName -t pathOfDirectory
Run Code Online (Sandbox Code Playgroud)

要么

pip install packageName --target pathOfDirectorty
Run Code Online (Sandbox Code Playgroud)