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

使用setuptools上传PyPI时文件缺失的问题求助

解决setuptools打包时遗漏子模块的问题

我来给你梳理下解决这个打包遗漏问题的所有可行方案,你可以根据自己的包结构选最适合的:

方案1:自动发现所有常规包(最推荐)

如果你的子文件夹都有__init__.py(标准Python包结构),直接用setuptools.find_packages()代替手动指定包列表就行。它会递归扫描当前目录下所有包含__init__.py的文件夹,自动把它们都加入打包范围。

修改后的setup.py代码:

import setuptools
setuptools.setup(
    name="mypkg",
    version="0.0.2",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

方案2:手动指定所有包和子包

如果你的包结构比较简单,不想用自动发现,也可以手动列出所有需要包含的包(包括子包)。注意:子文件夹必须有__init__.py才能被视为一个Python包。

修改后的setup.py代码:

import setuptools
setuptools.setup(
    name="mypkg",
    version="0.0.2",
    packages=['mypkg', 'mypkg.folder1'],  # 明确添加子包
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

方案3:处理无__init__.py的命名空间文件夹(Python 3.3+)

如果你的folder1目录没有__init__.py(现代命名空间包结构),可以用setuptools.find_namespace_packages()来自动发现所有模块,不需要手动创建__init__.py。

修改后的setup.py代码:

import setuptools
setuptools.setup(
    name="mypkg",
    version="0.0.2",
    packages=setuptools.find_namespace_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

方案4:手动包含单个模块文件(适合零散文件)

如果folder1里只有几个单独的.py文件,不想把它做成子包,也可以用py_modules参数指定这些模块。不过这种方法比较繁琐,文件多的时候不推荐。

修改后的setup.py代码:

import setuptools
setuptools.setup(
    name="mypkg",
    version="0.0.2",
    packages=['mypkg'],
    py_modules=['mypkg.folder1.class_a'],  # 指定单个模块路径
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

额外小提示

打包后可以先检查内容是否完整:

  • 运行python setup.py sdist生成源码包,解压生成的.tar.gz文件,确认是否包含mypkg/folder1/class_a.py
  • 或者用twine check dist/*检查包结构是否符合PyPI要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:19:49