为何setup.py无法打包进Wheel包?Azure Synapse场景下的解决办法
问题原因
package_data仅用于配置Python包目录内的资源文件(即包含__init__.py的目录下的文件),而setup.py是项目根目录的构建脚本,不属于任何Python包,因此空字符串''对应的配置无法将其纳入打包范围。- Wheel打包机制默认会忽略根目录的构建脚本(如
setup.py),这类文件被视为构建过程的临时文件,而非包的运行时资源。
解决方法
方法1:强制将setup.py纳入Wheel包
在项目根目录创建MANIFEST.in文件,添加以下内容:
include setup.py
同时修改setup.py,启用include_package_data=True让setuptools读取MANIFEST.in的配置:
setup( # 其他原有配置... include_package_data=True, package_data={ 'ddex.resources': ['schema-validation-rules.yaml'], } )
重新构建Wheel后,setup.py会被包含在包的根目录下。
方法2:更规范的版本管理方案(推荐)
不建议将构建脚本setup.py打包进Wheel,可通过以下方式避免版本号重复录入:
- 在项目根目录创建单独的版本文件(如
_version.py),写入版本信息:__version__ = "1.0.0" - 在
setup.py中读取该文件的版本:from setuptools import setup with open("_version.py") as f: exec(f.read()) setup( version=__version__, # 其他原有配置... ) - 在项目包的
__init__.py中导入版本供运行时使用:from ._version import __version__
这种方式既符合Python包规范,又彻底解决了版本号重复的问题,还不会引入不必要的构建脚本到Wheel中。
内容的提问来源于stack exchange,提问作者WestCoastProjects
相关产品推荐
相关产品推荐

