0

我有一个名称空间包,其文件夹结构为:CompanyName\DepartmentName\SubDepartmentName\PkgName

Python 3.3 及以上版本支持命名空间包,因此我没有将__init__.py文件放在以下文件夹中:

CompanyName
DepartmentName
SubDepartmentName

在 setup.py 中,我放置了以下代码setuptools.find_namespace_packages(),而不是 setuptools.find_packages().

当我尝试构建 sdist 时,使用以下命令:

python -m pip install --upgrade pip
python -m pip install --upgrade setuptools wheel
python setup.py sdist

我收到以下错误:

package init file 'CompanyName\__init__.py' not found (or not a regular file)
package init file 'CompanyName\DepartmentName\__init__.py' not found (or not a regular file)
package init file 'CompanyName\DepartmentName\SubDepartmentName\__init__.py' not found (or not a regular file)

我将任务设置作为 azure devops 管道的命令行任务的一部分,并将“标准错误失败”设置为 true。由于上述错误,管道失败。

4

1 回答 1

0

虽然Package init file not found (or not a regular file)更像是警告而不是本地错误,但如果Fail on standard error在使用 VSTS 时设置为 true,则会导致构建管道失败。

本地:

在此处输入图像描述

VSTSFail on standard error默认为 false:

在此处输入图像描述

VSTSFail on standard error为真:

在此处输入图像描述

1.为此,您可以选择关闭option( Fail on standard error),因为尽管出现该消息,但仍可以成功生成python命名空间包。所以在这种情况下,我认为你可以压制该信息。

2.另外,另一个方向是在生成包时解决消息。由于消息的原因与您在setup.py文件中的定义有关,因此您应该setuptools.find_namespace_packages()本文档建议的那样使用。

因为 mynamespace 不包含init .py,setuptools.find_packages() 不会找到子包。您必须改用 setuptools.find_namespace_packages() 或明确列出 setup.py 中的所有包。

另外:不建议删除__init__.py包中的所有文件,请查看AndreasLukas详细说明如果您想在导入包或其任何模块或子包时运行特定的初始化脚本,您仍然需要一个init .py 文件。

于 2019-12-31T08:45:35.897 回答