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

标签: python python-module


【解决方案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

你只有两种可能:

  1. 将文件本身移动到Project_folder
  2. 使用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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-04
          • 2020-08-12
          • 1970-01-01
          • 2014-11-09
          • 2018-01-08
          相关资源
          最近更新 更多