Python跨目录导入模块报错求助:No module named 'lib.mod2'
解决Python模块导入报错:No module named 'lib.mod2'
问题分析
你的目录结构下,直接在mod1.py中使用import lib.mod2 as mod2会报错,原因是Python的模块搜索路径不包含main目录——当你直接运行mod1.py时,Python默认把model目录作为搜索路径的一部分,而lib目录不在这个路径里,所以无法找到lib.mod2。另外你的导入语句遗漏了import关键字,正确写法应为import lib.mod2 as mod2。
以下是三种可行的解决方案:
方案一:使用相对导入(需将main作为包运行)
- 在
main、model、lib三个目录下都创建空的__init__.py文件(Python3.3+允许无此文件,但显式创建更规范)。 - 修改
mod1.py中的导入语句为:
from ..lib import mod2
- 从
main目录的上级目录运行脚本,示例命令:
python -m main.model.mod1
注意:不能直接双击或用python model/mod1.py运行,必须以模块方式启动。
方案二:动态添加搜索路径到sys.path
在mod1.py的最开头添加以下代码,将main目录加入Python的模块搜索路径:
import sys from pathlib import Path # 获取main目录的绝对路径 main_dir = Path(__file__).parent.parent sys.path.append(str(main_dir)) # 正常导入模块 import lib.mod2 as mod2
这种方法无需修改运行方式,直接运行mod1.py即可生效。
方案三:设置PYTHONPATH环境变量
在运行mod1.py之前,将main目录的路径添加到PYTHONPATH环境变量中:
- Windows命令行:
set PYTHONPATH=C:\实际路径\main
- Linux/macOS终端:
export PYTHONPATH=/实际路径/main
设置完成后,直接运行mod1.py,就能使用import lib.mod2 as mod2正常导入。
内容的提问来源于stack exchange,提问作者user20731251
相关产品推荐
相关产品推荐

