Python跨目录导入模块报错:ModuleNotFoundError: No module named 'app'
解决Python模块导入报错:ModuleNotFoundError: No module named 'app'
先确认你的项目结构(要保证每个目录都有__init__.py):
app/ ├── src/ │ ├── __init__.py │ └── main.py └── test/ ├── __init__.py └── test.py
下面是几种可行的解决办法:
方法1:临时添加项目路径到Python搜索列表
在test.py的最开头加上这段代码,把项目根目录(也就是app文件夹所在的上级目录)加入Python的搜索路径:
import sys from pathlib import Path # 定位到项目根目录 project_root = Path(__file__).parent.parent sys.path.append(str(project_root)) # 现在可以正常导入main里的函数了 from app.src.main import 你的函数名
方法2:使用相对导入
如果把整个app当作一个包来运行,在test.py里用相对导入:
# 从上级目录的src模块导入main from ..src.main import 你的函数名
注意:这种方式不能直接双击或用python test.py运行test.py,必须在app的父目录下执行命令:python -m app.test.test
方法3:设置PYTHONPATH环境变量(永久生效)
把项目根目录(app的上级目录)添加到系统的PYTHONPATH环境变量中:
- Windows:打开系统环境变量设置,新增PYTHONPATH变量,值填项目根目录的路径
- Linux/macOS:在终端执行
echo 'export PYTHONPATH="你的项目根目录路径:$PYTHONPATH"' >> ~/.bashrc(用zsh的话换成~/.zshrc),然后重启终端
为什么加了__init__.py还是报错?
Python默认只会搜索当前运行脚本的所在目录和标准库路径。你直接运行test.py时,Python的搜索起点是app/test/,找不到app这个模块,必须把app的父目录加入搜索路径,或者用相对导入的正确方式才能识别到包结构。
内容的提问来源于stack exchange,提问作者Miumen
相关产品推荐
相关产品推荐

