pip安装如何知道要安装的依赖项?

时间:2020-07-22 16:38:07

标签: python pip

我对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

那么点子怎么知道?它会查看每个文件并安装所有导入的软件包吗?还是在这里进行其他操作?

2 个答案:

答案 0 :(得分:1)

将软件包上传到PyPI时,还必须上传其他文件,如setup.py,setup.cfg,LICENSE.txt。在文件setup.py中,您必须调用setup()方法。您可以在其中指定install_requires字符串数组形式的atriubut。顾名思义,在此阵列中,您可以指定安装要求。

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

结论: 我认为软件包本身不会包含文件。

更有可能将请求发送到PyPI,服务器将以安装软件包的方式响应。

答案 1 :(得分:1)

项目打包并发布为发行版文件。这些文件(归档文件)不仅包含Python代码,而且还包含一些元数据。这种{em> metadata 中最重要的值之一是Requires-Dist,它(简明扼要)列出了它依赖的所有其他项目(即 pip 应该安装那些也是如此)。

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