Python打包异常:egg-info/source.txt文件未出现在构建包中
解决Python打包时子目录未被包含的问题
针对你遇到的打包后alembic、backups目录及alembic.ini文件未被安装到目标环境的问题,可尝试以下几种解决办法:
1. 给子目录添加__init__.py文件
setuptools默认将包含__init__.py的目录识别为子包,在package_name/alembic/和package_name/backups/目录下各创建一个空的__init__.py文件,让setuptools将它们当作子包处理,从而自动包含进安装包。
2. 明确MANIFEST.in规则
虽然你已经添加了graft package_name,但可以更明确地指定子目录和文件,修改MANIFEST.in内容为:
graft package_name/alembic graft package_name/backups include package_name/alembic.ini
这样能确保这些目录和文件被包含到源码包中。
3. 在setup.py中显式配置package_data
如果上述方法无效,可直接在setup()函数中添加package_data参数,强制指定需要包含的文件:
setup( packages=["package_name"], package_dir={ "package_name": "./package_name", }, include_package_data=True, package_data={ "package_name": [ "alembic.ini", "alembic/**/*", "backups/**/*" ] } )
其中**/*表示递归包含对应目录下的所有子目录和文件。
4. 检查pyproject.toml配置
确保你的pyproject.toml中build-system配置正确,指定setuptools作为构建后端:
[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta"
错误的构建后端配置可能导致文件未被正确打包。
5. 使用wheel重新构建测试
尝试用wheel格式构建包,避免sdist的潜在问题:
python -m build --wheel
构建完成后,先安装本地生成的.whl文件验证是否包含所需目录,确认无误后再上传到Nexus。
内容的提问来源于stack exchange,提问作者EgorRedkozubov
相关产品推荐
相关产品推荐

