我对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
那么点子怎么知道?它会查看每个文件并安装所有导入的软件包吗?还是在这里进行其他操作?
答案 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项目的开发人员必须明确声明这些依赖关系。根据用于项目的打包工具,有不同的方法来指定这些依赖项: