我有这个文件夹结构:
main_folder/
-- tests/
---- test01.py
-- some_package/
文件 test01.py 包含 import 语句
import some_package
我正在运行来自
main_folder
的 test01.py:
python tests/test01.py
所以,我希望工作目录是
main_folder
,并且脚本应该看到some_package
,它位于同一文件夹中,但我收到错误:
ModuleNotFoundError: No module named 'node_core'
我尝试在 test01.py 的开头添加这些命令:
os.getcwd() -> returns main_folder
sys.path -> returns main_folder/tests
所以,问题是路径条目不是我所期望的(
main_folder/tests
而不是main_folder
),但为什么会发生这种情况呢?这不应该由我启动脚本的位置决定吗?
因此,当您运行 Python 脚本时,当前工作目录不一定是脚本所在的位置。它通常是您调用脚本的目录。但 Python 使用一个名为 sys.path 的东西来确定在哪里寻找模块。
在您的情况下,从测试文件夹运行脚本会造成混乱。当前工作目录变为main_folder,但sys.path仍然指向main_folder/tests。
要解决这个问题,您可以手动告诉 Python 去哪里查找。在 test01.py 脚本的开头,添加一些行以将其自己的目录包含在 Python 应查找模块的位置:import os 导入系统
script_dir = os.path.dirname(os.path.abspath(file))
sys.path.append(script_dir)
导入一些_package
当然!因此,当您运行 Python 脚本时,当前工作目录不一定是脚本所在的位置。它通常是您调用脚本的目录。但 Python 使用一个名为 sys.path 的东西来确定在哪里寻找模块。
在您的情况下,从测试文件夹运行脚本会造成混乱。当前工作目录变为main_folder,但sys.path仍然指向main_folder/tests。
要解决这个问题,您可以手动告诉 Python 去哪里查找。在 test01.py 脚本的开头,添加一些行以在 Python 应查找模块的位置包含其自己的目录:
导入操作系统 导入系统
script_dir = os.path.dirname(os.path.abspath(file))
sys.path.append(script_dir)
导入一些_package
这样,即使您从测试文件夹运行脚本,Python 仍然会在 main_folder 中找到模块。