Python打包疑问:awesome模块打包失败及导入路径配置问题
问题解决:正确打包awesome包并保留层级导入
错误原因分析
- 原配置中
find_packages(where="awesome")仅扫描awesome目录下的子包(alice、bob、john),未将awesome本身作为顶层包纳入打包范围,导致构建时无法找到子包的正确路径,触发error: package directory 'alice' does not exist。 - 尝试的
package_dir={"": "awesome"}配置,会将awesome目录下的子包直接映射为Python顶层包,丢失了awesome父包层级,不符合你的导入需求。
正确配置方案
方案一:使用find_packages的include参数(推荐)
通过include指定仅打包awesome及其所有子包,自动排除not_awesome_1、not_awesome_2:
from setuptools import find_packages, setup setup( name="my-awesome-package", version="0.1.0", description="", long_description="", license="BSD", packages=find_packages(include=["awesome", "awesome.*"]), include_package_data=True, author="JPG", author_email="foo@gmail.com", install_requires=[], )
方案二:显式列出所有包(适合结构简单场景)
如果包结构固定,可直接列出需要打包的所有包:
from setuptools import setup setup( name="my-awesome-package", version="0.1.0", description="", long_description="", license="BSD", packages=["awesome", "awesome.alice", "awesome.bob", "awesome.john"], include_package_data=True, author="JPG", author_email="foo@gmail.com", install_requires=[], )
验证
执行命令python3 setup.py bdist_wheel生成wheel包,安装后即可通过以下方式正常导入:
from awesome.alice.conf import Alice alice = Alice()
内容的提问来源于stack exchange,提问作者JPG
相关产品推荐
相关产品推荐

