【问题标题】:Where does pip install its packages?pip 在哪里安装它的包?
【发布时间】:2015-07-10 22:14:38
【问题描述】:

我激活了一个安装了 pip 的virtualenv。我做了

pip3 install Django==1.8

Django 成功下载。现在,我想打开 Django 文件夹。文件夹在哪里?

通常它会在“下载”中,但我不确定如果我在 virtualenv 中使用 pip 安装它会在哪里。

【问题讨论】:

  • 能否通过 CLI 参数、环境变量或配置文件覆盖安装包的目录?

标签: python django pip virtualenv


【解决方案1】:

pip show <package name> 将为 Windows 和 macOS 提供位置,我猜是任何系统。 :)

例如:

> pip show cvxopt
Name: cvxopt
Version: 1.2.0
...
Location: /usr/local/lib/python2.7/site-packages

【讨论】:

  • 在 mac 上,这向我展示了一个包含 awscli 源代码的目录,但没有二进制文件。 ://
  • 正确,但要完全符合所提出的问题,应该是pip3 show <package name>
  • 我在 windows 上使用 python 3.6,“pip”指的是 python 3 的 pip。我不需要指定“pip3”。
  • @CoryKlein 不是site-packages/,而是在~/Library/Python/3.7/bin/找到的
  • 在 ubuntu 18.04 上运行良好
【解决方案2】:

pipvirtualenv 一起使用时,通常会在路径 <virtualenv_name>/lib/<python_ver>/site-packages 中安装包。

例如,我使用 Python 2.7 创建了一个名为 venv_test 的测试 virtualenv,django 文件夹位于 venv_test/lib/python2.7/site-packages/django

【讨论】:

  • 有时您可能不知道 virtualenv 名称/路径,例如与 Jupyterhub/binderhub 衍生资源一起使用。当pip show 什么都不做时,我找到了#1 here 的工作方式。简而言之,它包括输入适当的 python 控制台并输入help("module_name"),其中module_name 将替换为您感兴趣的实际模块名称。你可以在 python 控制台中看到带有help("modules") 的已安装模块。
  • 你用什么方式构建你的 virtualenv?我正在使用 conda 创建我的虚拟环境,而 pip3 没有在您提到的文件夹中安装软件包
  • 当时(大约 4 年前),我正在使用 virtualenv 和 Python 2.x。现在,我正在使用 venv 和 Python 3.5.x。不过,我仍然发现相同的通用文件夹结构。使用 Anaconda,这是一个精心策划的、独特的分布,因此它可能会以不同的方式构建事物,至少部分是这样。
  • 其他一些答案提供了更通用的方法来定位包位置。
【解决方案3】:

pip list -v可用于列出包的安装位置,在https://pip.pypa.io/en/stable/news/#b1-2018-03-31中介绍

使用“-v”选项运行 list 命令时显示安装位置。 (#979)

>pip list -v
Package                  Version   Location                                                             Installer
------------------------ --------- -------------------------------------------------------------------- ---------
alabaster                0.7.12    c:\users\me\appdata\local\programs\python\python38\lib\site-packages pip
apipkg                   1.5       c:\users\me\appdata\local\programs\python\python38\lib\site-packages pip
argcomplete              1.10.3    c:\users\me\appdata\local\programs\python\python38\lib\site-packages pip
astroid                  2.3.3     c:\users\me\appdata\local\programs\python\python38\lib\site-packages pip
...

此功能在pip 10.0.0b1 中引入。在Ubuntu 18.04(仿生海狸)上,pippip3 安装了sudo apt install python-pipsudo apt install python3-pip 是9.0.1,没有此功能。

查看https://github.com/pypa/pip/issues/5599 以了解升级pippip3 的合适方法。

【讨论】:

  • 不幸的是,这在 Ubuntu 18.04LTS 上不起作用
  • 对我来说,它不显示安装位置(在 Linux Mint 19.3 上)
  • 使用sudo apt install python-pipsudo apt install python3-pip 安装的pip 是9.0.1。检查github.com/pypa/pip/issues/5599 以了解升级pippip3 的合适方法。
  • 直接致电pip 不一定总能给出正确答案。使用特定的 python 可执行文件调用 pip 更好,例如python -m pip list -vstackoverflow.com/questions/29980798/…
【解决方案4】:

最简单的方法可能是

pip3 -V

这将显示您的 pip 的安装位置以及您的软件包所在的位置。

【讨论】:

【解决方案5】:

默认情况下,在 Linux 上,Pip 将软件包安装到 /usr/local/lib/python2.7/dist-packages。

在安装过程中使用 virtualenv 或 --user 将更改此默认位置。如果您使用pip show,请确保您使用的是正确的用户,否则pip 可能看不到您引用的包。

【讨论】:

  • Linux:以 root 身份在 python3 中安装软件包 - 不推荐 - 将进入 /usr/local/lib/python3.9/site-packages/。作为普通用户,他们将进入/home/normaluser/.local/lib..。我想知道/ root/.local/lib.. 是干什么用的。
【解决方案6】:

在 Python 解释器或脚本中,您可以这样做

import site
site.getsitepackages() # List of global package locations

site.getusersitepackages() # String for user-specific package location

对于第三方包(不在核心 Python 发行版中)的安装位置。

在我的Homebrew-installed Python on macOS 上,前者输出

['/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'],

它规范化到pip show 输出的相同路径,如上一个答案中所述:

$ readlink -f /usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages
/usr/local/lib/python3.7/site-packages

参考:https://docs.python.org/3/library/site.html#site.getsitepackages

【讨论】:

  • 好像不是所有的包都实现了getsitepackage()getusersitepackages()的功能。至少对于包statsmodels... 不存在这些功能
  • @GaelLorieul 没有这样的事情。这两个函数是site 模块的一部分;谈论“实现”它们的包是没有意义的。这些是使用pip 安装的any 包的默认位置,尤其包括statsmodels
【解决方案7】:

可以导入包然后查阅它的帮助

import statsmodels
help(sm)

在帮助的最底部有一个FILE 部分,指示此软件包的安装位置。

此解决方案至少使用 matplotlib (3.1.2) 和 statsmodels (0.11.1) (python 3.8.2) 进行了测试。

【讨论】:

  • 天啊。我希望我几个月前就知道help()!我什至编写了自己的代码来转储__doc__。现在我上瘾了。我每天做help(everything) 20 次。 救命!
【解决方案8】:

最安全的方法是通过您正在执行的特定python 调用pip。如果您直接运行pip show pip,它可能会调用与python 调用的pip 不同的pip。例子:

$ python -m pip show pip
$ python3 -m pip show pip
$ /usr/bin/python -m pip show pip
$ /usr/local/bin/python3 -m pip show pip

下面是一个例子,展示了它们的不同之处:

$ pip show pip

Location: /usr/local/lib/python3.9/site-packages

$ python -m pip show pip

Location: /Library/Python/2.7/site-packages

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2016-04-25
    • 2019-05-19
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多