python setup.py打包触发TypeError expected string报错问题求解
报错原因
- 第一个
TypeError异常:find_packages()本身的返回值就是字符串列表类型,你额外加了一层方括号包裹,相当于把返回的列表又套了一层列表,最终packages参数拿到的值是[['spark_jobs']]。setuptools在校验包名时会遍历packages里的元素,预期拿到字符串,实际拿到了嵌套的列表,所以触发类型错误。 - 手动设置
packages=['spark_jobs']后打包为空的常见原因:- 项目目录结构不符合要求:
setup.py需要和spark_jobs文件夹处于同级目录,且spark_jobs根目录下必须存在__init__.py文件(可为空,用于setuptools识别这是一个Python包) - 存在排除规则冲突:如果开启了
include_package_data=True,需要检查MANIFEST.in是否存在规则误排除了spark_jobs下的文件,或是项目的.gitignore规则被setuptools读取,导致文件没有被打包进去。
- 项目目录结构不符合要求:
正确处理方案
- 首先修正
setup.py里的packages参数配置,不需要额外套方括号:
# 错误写法 packages=[find_packages()] # 正确写法 packages=find_packages()
- 排查打包为空问题:
- 确保项目结构如下:
你的项目根目录/ ├── setup.py └── spark_jobs/ ├── __init__.py └── 你的其他代码文件.py
- 不需要额外配置
MANIFEST.in的话,可以临时把include_package_data=True改成include_package_data=False测试打包是否正常,确认是资源文件规则问题后再调整对应配置即可。
内容的提问来源于stack exchange,提问作者AlexLordThorsen
相关产品推荐
相关产品推荐

