PyPI上传的ethbotutils包安装后导入报ModuleNotFoundError如何解决
问题修复方案
核心原因
你遇到的导入失败问题是setup.py的packages参数配置错误,导致包结构未被正确打包:
你当前配置的packages=["."]会将项目根目录下的所有Python文件直接打包到Python环境的site-packages根路径,不会生成名为ethbotutils的包目录,因此无法通过import ethbotutils导入包,只能直接导入根目录下的单个脚本(比如import bot_utils),和你测试的现象完全吻合。
修复步骤
1. 调整项目为标准Python包结构
首先按照如下结构调整你的项目文件层级:
项目根目录/ ├── pyproject.toml ├── setup.py └── ethbotutils/ # 新增与包名同名的目录 ├── __init__.py # 必须存在,用于标识该目录为Python可导入包 ├── bot_utils.py └── 其他你需要打包的Python脚本文件
2. 修改setup.py配置
将packages参数修改为自动扫描包,或者显式指定包名:
from setuptools import setup, find_packages setup( name='ethbotutils', version='1.1', # 版本号需为字符串格式,与发布版本保持一致 packages=find_packages(), # 自动扫描项目内所有合法Python包 install_requires=["requests~=2.25.1", "PyYAML~=5.4.1"], python_requires=">=3.6" )
你也可以不用find_packages(),直接写packages=["ethbotutils"],效果完全一致。
3. 配置包导入逻辑(可选)
如果你希望执行import ethbotutils时就能直接使用包内的方法、类,可以在ethbotutils/__init__.py中提前暴露需要对外提供的内容:
# 示例:将bot_utils内的所有内容对外暴露 from .bot_utils import * # 也可以只暴露指定的对象:from .bot_utils import 函数名, 类名
4. 重新发布测试
- 先卸载本地已安装的旧版本包:
pip uninstall -y ethbotutils
- 重新构建包并上传至PyPI,之后安装新版本即可正常通过
import ethbotutils导入。
内容的提问来源于stack exchange,提问作者Alberto Pirillo
相关产品推荐
相关产品推荐

