Python自定义包安装后无法定位内部模块问题求助
解决Python包安装后ModuleNotFound/ImportError问题
1. 检查setup.py的包声明
你的项目包含多层子包,必须在setup.py中正确声明所有需要打包的模块。如果仅指定packages=['demopackage'],setuptools可能无法自动识别所有子包,建议使用find_packages()自动扫描:
from setuptools import setup, find_packages setup( name="demopackage", version="0.1", packages=find_packages(), # 自动包含demopackage及所有子包 entry_points={ 'console_scripts': [ 'demopackage = demopackage.main:main' # 可选:添加命令行入口 ] } )
如果手动指定包,需列出所有层级:
packages=[ 'demopackage', 'demopackage.config', 'demopackage.processor', 'demopackage.processor.dbprocessor', 'demopackage.processor.fileprocessor', 'demopackage.validation', 'demopackage.util' ]
2. 修正代码中的导入方式
本地运行时相对导入可能有效,但安装后包作为第三方模块,必须使用绝对导入:
错误示例(相对导入,安装后失效):
from .config.dumyconfig import some_func from ..util.dumyutil import another_func
正确示例(绝对导入):
from demopackage.config.dumyconfig import some_func from demopackage.util.dumyutil import another_func
本地测试时建议用python -m demopackage.main代替直接运行python main.py,模拟安装后的环境逻辑。
3. 验证打包内容完整性
创建tar.gz后,解压查看内部结构,确认所有子包的__init__.py和模块文件都被包含。也可直接用命令查看:
tar -tvf dist/demopackage-0.1.tar.gz
确保demopackage/目录下包含所有子文件夹(config、processor等)及对应文件。
4. 排查Python路径与版本问题
安装后若模块存在仍报错,可在报错脚本中打印Python路径,确认site-packages在路径内:
import sys print(sys.path)
同时检查安装和运行是否使用了同一Python版本(比如用pip3安装但用python运行,可能导致版本不匹配)。
5. 清理旧安装缓存
若之前安装过旧版本,可能存在缓存冲突,先卸载再重新安装:
pip uninstall -y demopackage pip install dist/demopackage-0.1.tar.gz
内容的提问来源于stack exchange,提问作者Ashis Sahoo
相关产品推荐
相关产品推荐

