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

Posted

技术标签:

【中文标题】导入在具有多个目录的python中不起作用【英文标题】:import not working in python with multiple directory 【发布时间】:2022-01-16 16:50:19 【问题描述】:
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

【问题讨论】:

from B import B更改为from .B import B 我不允许更改文件A.pyB.py @Gahan 【参考方案1】:

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

无论何时检查-print(sys.path)列出的所有路径都可以使用python的import语句,并且必须使用它以适当的层次结构导入才能成功执行操作。

由于您正在执行项目,您的根工作目录将是: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

你只有两种可能:

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

【讨论】:

【参考方案2】:

当您执行 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)

【讨论】:

【参考方案3】:

你需要试试这个

from folder_x.B import B

【讨论】:

【参考方案4】:

B.py 从 folder_x 移动到 Project_folder

【讨论】:

不允许修改A.pyB.py【参考方案5】:

试试这个:

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

【讨论】:

以上是关于导入在具有多个目录的python中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

表单权限在具有多个表单的模块中不起作用

Spring Security 具有不同用户详细信息的多个 HTTPSecurity 服务在 Spring Boot 中不起作用

具有自动调整大小的多个文本区域在 ionic3 中不起作用

多个关键帧动画在 Safari 中不起作用

Bootstrapvalidator 在动态输入字段中不起作用

为啥导入 cugraph 在 kaggle 中不起作用?