Python运行目录异常:找不到名为'tools'的模块?
问题原因与解决方法
核心原因
当你执行python tools/tool.py时,Python会将**脚本所在的目录(即tools/)**添加到模块搜索路径sys.path中,而非当前工作目录(根目录)。尽管os.getcwd()显示当前工作目录是根目录,但根目录不在Python的模块搜索路径里,因此Python找不到tools这个包(tools目录本身是根目录下的子目录)。
解决办法
方法1:改用相对导入
因为tool.py和env.py在同一个tools目录下,直接用相对导入引用同目录的模块:
import os print("Current working directory:",os.getcwd()) # 用相对导入替代绝对导入 from .env import setup_env
注意:这种方式需要将tools作为包来运行,在根目录执行命令:
python -m tools.tool
不能再用python tools/tool.py直接运行,否则会触发ValueError: attempted relative import in non-package错误。
方法2:手动把根目录加入模块搜索路径
在tool.py开头添加代码,将根目录(当前工作目录)加入sys.path,让Python能找到tools包:
import os import sys # 将当前工作目录(根目录)添加到模块搜索路径 sys.path.append(os.getcwd()) print("Current working directory:",os.getcwd()) from tools.env import setup_env
这样修改后,原来的python tools/tool.py命令可以正常执行。
方法3:用-m参数以包的形式运行
直接在根目录执行以下命令,Python会自动将根目录加入sys.path,此时tools作为可导入的包,原代码无需修改:
python -m tools.tool
关键知识点补充
- Python的模块搜索依赖
sys.path列表,只有在这个列表里的目录,Python才会去查找对应的包或模块。 - 直接运行脚本文件时,脚本所在目录会被优先加入
sys.path;用-m参数运行包中的模块时,当前工作目录会被加入sys.path。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

