在站点包中,有
pytest
和 _pytest
文件夹。
大部分核心代码都在_pytest中。
在查看 pyproject.toml 时,我找不到 setuptools 如何知道安装
pytest
和 _pytest
?
我认为这是由于
__init__.py
文件的存在,但其他文件夹(如 testing/example_scripts
)也有它们,所以这不太可能是原因。
https://github.dev/pytest-dev/pytest中也没有setup.py。 正在寻找类似的东西
setup(
name='your_project_name',
version='0.1',
packages=find_packages() # or something like ['pytest', '_pytest']
)
还有为什么pip list
和
pipdeptree
不显示
_pytest
?我假设站点包中的所有包都会显示。 我想以 _ 开头的包是否像 python 的私有变量一样是私有的,但 pip list 中没有关于显示“私有包”的选项。
在查看 pyproject.toml 时,我找不到 setuptools 如何知道安装 pytest 和 _pytest?它是
setuptools
代码中的内部知识,而不是在配置文件中表达。当
setuptools
为
pytest
构建 sdist 或轮子时,它会查找根目录,找到子目录
src
并知道它是 src-layout。因此,它将所有内容打包在 src
下,看起来像包和子包(带有
__init__.py
的目录)和模块(
*.py
)。安装发行版时,
pip
会解压所有内容,包括
_pytest
。
另外为什么 pip list 和 pipdeptree 不显示 _pytest?因为它不是一个单独的发行版。它是一个分布在
pytest
发行版中的包(可导入目录)。
pip list
和相关程序列表发行版,而不是软件包。
我假设站点包中的所有包都会显示。不,不是所有包(可导入目录)。所有已安装的发行版!
安装发行版时,
pip
将其注册到其“数据库”中,该“数据库”是
*.egg-info
下的一组
*.dist-info
和
site-packages
目录。查找目录
pytest-<version>.dist-info
并查看文件
top_level.txt
— 它列出了发行版的顶级模块(
py
表示
py.py
)和包(
_pytest
和
pytest
)。这样它就知道卸载时要删除什么。