为何Python本地模块可在REPL导入,但脚本运行报ModuleNotFoundError
解决方法
模块导入报错修复
你在REPL中可以正常导入BarMod,说明模块本身安装没有问题,运行fizz.py抛出ModuleNotFoundError的核心原因是运行脚本的Python解释器与你安装BarMod的虚拟环境不匹配,按以下步骤排查修复:
- 保持虚拟环境处于激活状态,在终端执行:
- Windows系统:
where python - macOS/Linux系统:
which python
确认输出的Python路径为FizzApp目录下虚拟环境env内的可执行文件路径。
- Windows系统:
- 不要使用IDE默认的运行按钮执行fizz.py,在当前激活虚拟环境的终端中,cd到FizzApp目录,执行
python fizz.py即可正常运行。
关于模块方法导出的优化:你在__init__.py中添加from .BarMod import foofunc的操作是正确的,调整后你可以直接在fizz.py中使用更简洁的导入写法:
import BarMod print(BarMod.foofunc(1)) # 也可以直接导入方法 # from BarMod import foofunc # print(foofunc(1))
pip弃用规则适配
按以下操作即可适配新版pip规则,避免后续功能失效:
- 升级当前虚拟环境的pip到最新版本:
python -m pip install --upgrade pip
- 安装wheel包,避免legacy安装提示:
pip install wheel
- 21.3版本以下的pip安装本地包时添加
--use-feature=in-tree-build参数即可适配新的构建规则:
pip install --use-feature=in-tree-build ./BarMod
pip 21.3及以上版本已经将in-tree-build设为默认行为,无需额外添加参数。
内容的提问来源于stack exchange,提问作者Dapper
相关产品推荐
相关产品推荐

