pytest如何将pytest和_pytest安装到site-packages中,这是在pyproject.toml中指定的?

问题描述 投票:0回答:1

在站点包中,有

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 中没有关于显示“私有包”的选项。

pytest setuptools pyproject.toml
1个回答
0
投票
在查看 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
)。这样它就知道卸载时要删除什么。

© www.soinside.com 2019 - 2024. All rights reserved.