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

Twine上传到PyPi时extension文件夹未被打包仅外层Python文件上传

解决方案

该问题和Twine工具无关,Twine仅负责上传已生成的构建产物,核心原因是setuptools打包配置缺失,导致嵌套的extension子包未被纳入构建范围,按以下步骤调整即可:


步骤1:修正导入语法错误

你现有的__init__.py导入写法不符合相对导入规范,会导致包安装后无法正常引用子模块,先做修改:

  • Actual Module Folder/__init__.py修改为:
    from .file1 import *
    from .extension import *
    
  • Actual Module Folder/extension/__init__.py修改为:
    from .file2 import *
    from .file3 import *
    from .file4 import *
    

注意:模块文件夹名称包含空格不符合Python包命名规范,建议改为下划线分隔的小写名称(比如actual_module_folder),避免后续打包、导入出现未知问题。


步骤2:调整setup.py打包配置

需要让setuptools识别到嵌套的extension子包,两种配置方式二选一即可:

方式一:自动检索所有包(推荐)

用setuptools内置的find_packages自动扫描所有含__init__.py的包:

from setuptools import setup, find_packages

setup(
    # 原有配置(name、version、author等参数保持不变)
    packages=find_packages(),
    # 如果extension下有非.py格式的资源文件,需添加下面这行
    include_package_data=True
)

方式二:手动显式列出所有包

from setuptools import setup

setup(
    # 原有配置(name、version、author等参数保持不变)
    packages=[
        "Actual Module Folder",
        "Actual Module Folder.extension"
    ],
    # 如果extension下有非.py格式的资源文件,需添加下面这行
    include_package_data=True
)

步骤3:可选:添加MANIFEST.in配置

如果extension文件夹下包含.py之外的资源(比如二进制文件、配置文件、静态资源等),需要在项目根目录(和setup.py同级)新建MANIFEST.in文件,添加以下内容:

recursive-include "Actual Module Folder/extension" *

步骤4:重新构建验证

调整完成后先清理旧构建产物、重新打包,确认extension文件夹已被纳入:

# 清理旧产物(Windows系统手动删除dist、build、*.egg-info文件夹即可)
rm -rf dist build *.egg-info
# 重新构建
python setup.py sdist bdist_wheel
# 解压dist目录下的.tar.gz压缩包,确认内部包含extension文件夹及所有对应文件

验证构建产物无误后,再用twine执行上传即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:24:03