Python包导入报错ModuleNotFoundError: No module named 'sounds'求助
问题原因
你遇到的ModuleNotFoundError是因为直接运行脚本时,Python的模块搜索路径不包含sounds包的父目录。
当你执行python3 main.py(在sounds/目录下)或python3 sounds/main.py(在父目录下)时,Python会将脚本所在的目录(前者是/home/user/sounds/,后者也是/home/user/sounds/)加入sys.path。但你的导入语句from sounds.formaters import items是在找名为sounds的子包,而当前sys.path里的目录就是sounds本身,自然找不到这个子包。
解决方案
这里提供几种实用的解决方式:
方式1:使用相对导入 + 包模式运行
修改sounds/main.py的导入语句为相对导入:
from .formaters import items print(items.format_list)
然后切换到sounds的父目录(/home/user/),用Python的包运行模式执行:
python3 -m sounds.main
这种方式符合Python包的规范,是推荐的做法。
方式2:临时修改模块搜索路径(不推荐)
如果需要直接运行main.py,可以在脚本开头手动把父目录加入sys.path:
import sys import os # 获取当前脚本的父目录的父目录(即/home/user/) sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from sounds.formaters import items print(items.format_list)
这种方式虽然能解决问题,但会破坏包的独立性,不建议在正式项目中使用。
方式3:将包安装到Python环境(适合发布场景)
如果需要在任意位置都能导入sounds包,可以通过打包工具将其安装到Python的site-packages目录。比如创建pyproject.toml文件(放在sounds的父目录):
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "sounds" version = "0.1.0"
然后执行安装命令(在父目录下):
pip install -e .
之后无论在哪里都能正常导入sounds包,也可以直接运行python3 -m sounds.main。
内容的提问来源于stack exchange,提问作者Rasoul Rostami
相关产品推荐
相关产品推荐

