Python包通过Pip交付的最小要求及安装后导入失败求助
问题原因与解决方案
核心问题
你的本地包目录名为my_package(带下划线),但setup.py里的name参数设为mypackage(无下划线),两者不匹配。find_packages()会自动识别当前目录下带__init__.py的子目录作为待打包的包,也就是my_package,所以安装后虚拟环境的site-packages里实际存在的包是my_package,而非你尝试导入的mypackage,最终导致ModuleNotFoundError。
具体修复方案(二选一即可)
方案1:统一包目录名与setup中的name
将本地的my_package目录重命名为mypackage(去掉下划线),保持和setup.py里的name参数一致。修改后find_packages()会正确识别mypackage作为要分发的包,安装后就能正常执行import mypackage。
方案2:显式指定要打包的包
如果不想修改目录名,直接修改setup.py中的packages参数,明确指定实际的包目录名:
from setuptools import setup, find_packages setup( name='mypackage', version='0.1', description='My Package', author='Its me', author_email='my.email@address.moon', packages=['my_package'], # 改为实际的包目录名 install_requires=[ 'cx_Oracle>=7.2.2' ] )
同时测试文件里的导入语句要对应实际包名:
import cx_Oracle print(cx_Oracle.version) import my_package # 对应目录名
验证步骤
- 修复后重新生成分发包:
python setup.py sdist
- 在虚拟环境中重新安装新生成的包:
pip install <完整路径到dist\mypackage-0.1.tar.gz>
- 运行测试文件,确认导入正常。
内容的提问来源于stack exchange,提问作者am2
相关产品推荐
相关产品推荐

