【问题标题】:How does pip install know what dependancies to install?pip install 如何知道要安装哪些依赖项?
【发布时间】:2020-07-22 16:38:07
【问题描述】:

我对 pip 如何知道要为软件包安装哪些依赖项感到困惑。

首先,我创建了一个新的虚拟环境

% python3 -m venv env

激活它

% source env/bin/activate

列出已安装的软件包。我只看到默认安装。

% pip list
Package    Version
---------- -------
pip        19.2.3
setuptools 41.2.0

然后,我安装了另一个包(请求)

% pip install requests

当我再次列出已安装的软件包时,我发现安装的软件包比我要求的要多得多。我知道它正在安装这些,因为 pip 知道我需要它们来安装软件包,但是如何安装呢?

Package    Version
---------- ---------
certifi    2020.6.20
chardet    3.0.4
idna       2.10
pip        19.2.3
requests   2.24.0
setuptools 41.2.0
urllib3    1.25.10

我在想包的根目录中一定有一个 requirements.txt,但我没有看到它。

% cd env/lib/python3.8/site-packages/requests
% ls | grep requests.txt | wc -l
       0

那么 pip 是怎么知道的呢?它会查看每个文件并安装所有导入的包,还是这里有其他魔法?

【问题讨论】:

标签: python pip


【解决方案1】:

项目被打包并发布为 distribution 文件。这些文件(档案)不仅包含 Python 代码,还包含一些元数据。这种元数据中最重要的值之一是Requires-Dist,它(简而言之)列出了它所依赖的所有其他项目(即pip也应该安装这些项目)。

Python 项目的开发人员必须明确声明这些依赖项。根据项目使用的打包工具,有不同的方法来指定这些依赖项:

【讨论】:

    【解决方案2】:

    当您将包上传到 PyPI 时,您还必须上传其他文件,例如 setup.py、setup.cfg、LICENSE.txt。在 setup.py 文件中,您必须调用 setup() 方法。在那里,您可以使用字符串数组指定 install_requires atriubut。在这个数组中,顾名思义,您可以指定安装要求。

    您可以在以下位置找到更多信息:How to upload your python package to PyPi

    结论: 我认为包本身不会有文件。更有可能向 PyPI 发送请求,服务器将响应要安装的包。

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 2019-11-24
      • 2021-04-11
      • 2019-02-07
      • 2016-08-21
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多