Python ModuleNotFoundError:跨模块导入Tokens失败的原因与解决
模块导入错误原因及解决方法
错误原因
Python导入模块时,只会在sys.path列表的目录里查找模块。你运行script.py时,Python的搜索路径里没包含my_project目录,所以无法识别app1或my_project作为合法模块。
解决方法
方法1:代码内临时添加路径
在script.py最开头添加代码,手动把项目根目录加入搜索路径:
import sys from pathlib import Path # 获取my_project的绝对路径 project_root = Path(__file__).parent.parent.parent sys.path.append(str(project_root)) # 正常导入 from app1.module import Tokens
说明:Path(__file__)是当前script.py的路径,连续三次.parent会定位到my_project目录。
方法2:设置环境变量PYTHONPATH
运行脚本前,把my_project的绝对路径添加到PYTHONPATH:
- Linux/macOS终端:
export PYTHONPATH="/实际路径/my_project:$PYTHONPATH" python app2/feature1/script.py - Windows命令行:
set PYTHONPATH=C:\实际路径\my_project;%PYTHONPATH% python app2\feature1\script.py
设置后Python会自动搜索该目录,无需修改代码。
方法3:将项目安装为可编辑包(长期项目推荐)
在my_project目录下创建pyproject.toml文件,内容如下:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "my_project" version = "0.1.0"
然后在my_project目录执行:
pip install -e .
这样项目会以可编辑模式安装,之后无论在哪都能直接用from app1.module import Tokens导入。
方法4:相对导入(需以模块方式运行)
如果在my_project的上级目录,用模块方式启动脚本:
python -m my_project.app2.feature1.script
那么script.py里可以用相对导入:
from ...app1.module import Tokens
注意:这种方式不能直接运行script.py(如python script.py),必须用-m参数启动。
内容的提问来源于stack exchange,提问作者jiisanda
相关产品推荐
相关产品推荐

