You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建命名空间包sdist时出现"Package init file not found"错误

我之前也遇到过一模一样的问题!明明Python 3.3+已经支持无__init__.py的命名空间包,用了find_namespace_packages()还是报错找不到那些文件,而且Azure DevOps因为开了Fail on standard error直接挂了。折腾了一阵终于搞定,分享下解决方案:

1. 先把setup.py的配置补全

别直接用find_namespace_packages()不带参数,得明确告诉它要聚焦哪些命名空间,避免不必要的目录检查。修改你的setup.py如下:

from setuptools import setup, find_namespace_packages

setup(
    name="你的包名",  # 替换成实际的包名称
    version="0.1.0",
    # 指定只扫描CompanyName开头的命名空间及其子包
    packages=find_namespace_packages(include=["CompanyName.*"]),
    # 其他必要配置:比如依赖包、入口点等按需添加
)

2. 添加MANIFEST.in文件确保命名空间目录被打包

sdist构建时默认不会包含没有__init__.py的目录,所以得手动给它指定规则。在项目根目录新建一个MANIFEST.in文件,内容就一行:

# 递归包含CompanyName下的所有文件和子目录
recursive-include CompanyName *

这个文件会告诉setuptools把整个命名空间目录树都塞进源码包,不管有没有__init__.py。

3. 强制升级到足够新的setuptools版本

旧版本的setuptools对命名空间包的支持有坑,会把缺少__init__.py当成错误而非警告。在流水线的命令行任务里,明确指定升级到60.0.0及以上版本:

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

4. 万不得已的备选:调整流水线错误检查

如果上面几步都做了还是有stderr输出,但实际sdist包已经构建成功,可以考虑把Azure DevOps里的"Fail on standard error"改成false——但这是最后一招,优先搞定前面的配置问题更稳妥。

按这个流程操作后,setuptools就能正确识别命名空间包,不会再因为缺少__init__.py报错,Azure DevOps流水线也能顺利跑通了。

内容的提问来源于stack exchange,提问作者variable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:04:13