Python跨目录导入模块遇ModuleNotFoundError问题求助
解决Python模块导入路径问题:模拟从根目录运行脚本
问题场景
把原本在根目录的process.py移到processing_scripts目录后,运行时弹出ModuleNotFoundError: No module named 'utils'错误。当前项目文件结构如下:
. +-- Root | |-- main_script.py | +-- utils | | | |-- utilsA.py | `- utilsB.py | +-- processing_scripts | `- process.py
相关代码里的导入逻辑:
process.py:from utils import utilsA as uutilsA.py:from utils.utilsB import util_function
试过sys.path.append('../')和修改process.py的导入为from Root.utils import utilsA as u,但只要utilsA.py引用utilsB.py就还是报错。想要不用改大量代码,让process.py模拟从根目录运行的效果。
可行方案
方案1:在脚本里主动添加根目录到搜索路径(推荐)
直接在process.py的最开头加这段代码,把项目的Root目录加入Python的模块搜索路径:
import os import sys # 获取当前脚本的绝对路径所在目录 current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 往上跳一级就是Root目录 root_project_dir = os.path.dirname(current_script_dir) # 把根目录插入到搜索路径最前面 sys.path.insert(0, root_project_dir)
加完之后,不管你从哪个目录运行process.py,Python都会从Root目录开始找utils模块,utilsA.py里的导入逻辑也完全不用改,直接就能正常运行。
方案2:从根目录直接启动脚本
不用改任何代码,直接打开终端切换到Root目录,然后运行:
python processing_scripts/process.py
这样Python会把Root当作工作目录,所有模块导入的逻辑和之前process.py在根目录时完全一样,自然不会报错。
方案3:设置PYTHONPATH环境变量
运行process.py前,先把Root目录设为PYTHONPATH,让Python自动识别这个路径作为模块搜索根目录:
- Linux/macOS终端操作:
export PYTHONPATH=/实际路径/YourProject/Root cd processing_scripts python process.py
- Windows命令提示符操作:
set PYTHONPATH=C:\实际路径\YourProject\Root cd processing_scripts python process.py
设置完之后,原有所有导入语句都能正常解析,不需要修改代码。
内容的提问来源于stack exchange,提问作者guskenny83
相关产品推荐
相关产品推荐

