【发布时间】: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 是怎么知道的呢?它会查看每个文件并安装所有导入的包,还是这里有其他魔法?
【问题讨论】:
-
install_requiresinsetup.py -
我也没有看到
% ls env/lib/python3.8/site-packages/requests | grep install_requires | wc -l 0 -
该命令搜索名为“install_requires”的文件。该文件名为
setup.py。 github.com/psf/requests/blob/master/setup.py#L83