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
相关产品推荐
相关产品推荐

