Python文件组织引发的“No Module named”错误解决咨询
Python文件组织引发的“No Module named”错误解决咨询
你遇到的这个模块导入问题在Python项目里超级常见,先帮你再明确下当前的项目结构:
src | ----folder1 |------file.py ----folder2 |------file2.py
当你在folder2/file2.py里执行这句导入代码时:
from folder1.file import *
触发了No Module Named Error,本质是Python解释器的模块搜索路径里找不到folder1所在的src目录,下面给你几个实用的解决思路:
给目录添加模块标识文件
在folder1和folder2这两个目录里,各新建一个空的__init__.py文件(Python 3.3+之后支持无此文件的命名空间包,但加这个文件能让项目在更多环境下兼容),修改后的结构如下:src | ----folder1 |------__init__.py |------file.py ----folder2 |------__init__.py |------file2.py在代码中临时添加搜索路径
如果你不想改项目结构,可以在file2.py的最开头加上这段代码,把src目录的绝对路径手动加入Python的搜索路径:import sys import os # 计算src目录的绝对路径:当前文件的父目录的父目录 src_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) if src_dir not in sys.path: sys.path.append(src_dir) # 现在再执行导入就没问题了 from folder1.file import *这种方式适合快速调试临时用。
通过环境变量指定搜索路径
可以在运行脚本前,把src目录的路径设置到PYTHONPATH环境变量里,这样Python会自动去这个路径下找模块:- Linux/macOS终端执行:
export PYTHONPATH=/你的实际路径/src:$PYTHONPATH python src/folder2/file2.py - Windows命令行执行:
set PYTHONPATH=C:\你的实际路径\src;%PYTHONPATH% python src\folder2\file2.py
- Linux/macOS终端执行:
规范项目的运行入口
更推荐的正式项目做法是在src目录下新建一个主入口文件,比如main.py,然后通过这个入口来调用各个模块的功能:# src/main.py from folder2.file2 import 你需要的函数或类 # 这里写业务逻辑 if __name__ == "__main__": # 执行你的代码 pass然后从
src目录的父目录运行这个入口文件:python src/main.py这种方式能从根源上避免模块路径问题,也更符合Python项目的结构规范。
备注:内容来源于stack exchange,提问作者Rishabh Agarwal




