运行Python脚本时遭遇ModuleNotFoundError问题求助
解决Python ModuleNotFoundError问题
问题场景
目录结构:
housekeeping # 根目录 └── src ├── core1 │ ├── abc.py # 包含类xyz │ └── __init__.py └── core2 ├── def.py └── __init__.py
def.py代码:
from core1.abc import xyz print("name")
启动命令(startup.sh中调用):
/housekeeping/venv/bin/python3.7 /housekeeping/src/core2/def.py
报错提示找不到core1模块(原描述中folder1为笔误),修改导入为from src.core1.abc import xyz并给src加__init__.py后仍无效。
解决方案
方法1:手动添加模块搜索路径
在def.py开头加入代码,将src目录加入Python的模块搜索路径:
import sys import os # 获取src目录的绝对路径 src_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../')) sys.path.append(src_dir) from core1.abc import xyz print("name")
方法2:以模块形式运行脚本
修改startup.sh中的启动命令,用-m参数以模块方式调用,让Python自动识别项目结构:
cd /housekeeping /housekeeping/venv/bin/python3.7 -m src.core2.def
注:必须先切换到项目根目录(housekeeping),否则Python无法识别模块层级。
方法3:设置PYTHONPATH环境变量
在startup.sh中先指定PYTHONPATH为src目录,再运行脚本:
export PYTHONPATH=/housekeeping/src /housekeeping/venv/bin/python3.7 /housekeeping/src/core2/def.py
此时Python会自动从PYTHONPATH指定的目录搜索模块,def.py中原有的from core1.abc import xyz即可正常导入。
原因说明
直接运行脚本时,Python默认仅将脚本所在目录加入模块搜索路径(sys.path),core1所在的src目录不在搜索范围内,因此无法找到模块。上述三种方法均通过不同方式让Python能定位到src目录下的core1模块。
内容的提问来源于stack exchange,提问作者Y2Jepic
相关产品推荐
相关产品推荐

