导入在多个目录的 python 中不起作用

import not working in python with multiple directory

Project_folder
    main.py
    folder_x
        __init__.py
        A.py
        B.py
    folder_y
        __init__.py
        C.py
        D.py

我有一个类似上面的项目结构。在 main.py 中,我正在导入 A.py

from folder_x.A import A

A.py 文件中我有

from B import B

但它正在给予

    from B import B
ModuleNotFoundError: No module named 'B'

我找到了一些相关问题的答案(更新系统路径)。但是还有别的办法吗? 而且我也不允许修改 A.pyB.py

B.py 从 folder_x 移动到 Project_folder

你需要试试这个

from folder_x.B import B

Python 解释器不会按照您试图假设的方式解释您的代码。

每当您检查 - print(sys.path) 列出的所有路径都可以使用 python 的导入语句,并且必须使用它以正确的层次结构导入以便您执行操作成功。

由于您正在执行项目,因此您的根工作目录为:Project_folder

from folder_x.A import A 将起作用,因为可以从 Project_folder

映射路径

为了能够在内部使用模块,您需要使用相对路径为 Project_folder

的模块内部导入

from folder_x.B import Bfrom folder_x.A import A

因为您提到不允许更改 A.pyB.py

你只有两种可能:

  1. 将文件本身移动到 Project_folder
  2. 使用 sys.path.insertsys.path.append 将您的文件夹路径 folder_x 添加到系统路径。

试试这个:

import sys
function_path = r'C:\Users\hogsione\jupyter' # Folder path where your .py file is present
sys.path.insert(1, function_path)
from A import my_function

当您执行 main.py python 解释器时,使用该 main.py 文件路径作为执行整个应用程序的基本路径。

该基本路径自始至终都指代应用程序中的导入模块。 因此,无论何时导入,请确认您的导入应遵循该基本路径(如上所述)目录结构。

以下是您可以尝试的解决方案, 只需在您的代码中添加以上几行即可帮助您更好地解决问题。

sys.path.append(os.path.abspath(os.path.join(os.getcwd(), os.pardir)))

import sys
from os.path import dirname, abspath
d=dirname(dirname(abspath(__file__)))
sys.path.append(d)