Python - 导入问题,路径条目是如何确定的?

问题描述 投票:0回答:1

我有这个文件夹结构:

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-import
1个回答
0
投票

因此,当您运行 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))

将此脚本的目录添加到 Python 看起来的位置

sys.path.append(script_dir)

现在 Python 知道在哪里可以从同一目录中找到模块了

导入一些_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))

将此脚本的目录添加到 Python 看起来的位置

sys.path.append(script_dir)

现在 Python 知道在哪里可以从同一目录中找到模块了

导入一些_package

你的脚本的其余部分...


这样,即使您从测试文件夹运行脚本,Python 仍然会在 main_folder 中找到模块。

© www.soinside.com 2019 - 2024. All rights reserved.