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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:11