【问题标题】:Unexpected behaviour in python module not found未找到 python 模块中的意外行为
【发布时间】:2021-04-01 21:28:17
【问题描述】:

我正在尝试构建一个 PyQt5 GUI 应用程序。我在 Centos-8 上安装了 python3.6 和 pyqt5。 目录结构如下:

Workspace/
├── app.py
├── Controller
├── Model
└── View
    ├── ContentLayout
    │   ├── UserActions
    │   │   └── ButtonLayout.py
    │   └── UserInput
    │       └── TextInputLayout.py
    ├── FooterLayout
    ├── HeaderLayout
    ├── mainMenu.py

app.py:

# This is main application
from View.mainMenu import MenuDesign

if __name__ == "__main__":
    test = MenuDesign()
    test.genereateLayout()

ma​​inMenu.py:

from ContentLayout.UserInput.TextInputLayout import TextInput
from PyQt5.QtWidgets import QMainWindow

class MenuDesign(QMainWindow):
    def __init__(self):
        super().__init__()
        pass

    def genereateLayout(self):
        self.userinput = TextInput()
        self.userinput.initialize_label()
        self.userinput.initialize_textinput()
        print("Function called from TextInputLayout")

TextInputLayout.py:

# This is class for designing layouts for text input boxes and status bar.
class TextInput:
    """This is main class for user inputs."""
    def __init__():
        pass

    def initialize_label(self):
        print("Function is printing from TextInputLayout")
        pass

    def initialize_textinput(self):
        print("Function is printing textinput from TextInputLayout")
        pass

当我运行应用程序时,我收到以下错误:

Traceback (most recent call last):
  File "app.py", line 1, in <module>
    from View.mainMenu import MenuDesign
  File "/home/amarjeets/Workspace/View/mainMenu.py", line 2, in <module>
    from ContentLayout.UserInput.TextInputLayout import TextInput
ModuleNotFoundError: No module named 'ContentLayout'

我尝试将__init__.py 文件放在ViewContentLayoutUserInput 文件夹中,但所有排列/组合仍然是相同的错误。
在给定项目文件夹/文件结构的python中导入模块/类/函数,我需要遵循任何规则或一般准则吗?

如果我在 ContentLayout 文件夹中还有一个文件,即 consolidatedLayout.py 以及所有其他文件,那么如何从 ButtonLayout.pyTextInputLayout.py 中的 consolidatedLayout.py 导入模块

【问题讨论】:

  • 我认为您必须在 app.py 的文件夹中也有一个 __init__.py 才能正常工作。
  • @HampusLarsson 先生.. 我也检查过那个......同样的错误。我什至把__init__.py 放到所有文件夹中仍然是同样的错误。

标签: python-3.x pyqt5 centos8


【解决方案1】:

我有以下文件夹结构:

C:.
│   app.py
│   __init__.py
│
└───View
    │   MainScript.py
    │   __init__.py
    │
    └───Folder1
            sub1.py
            __init__.py

app.py:

from View.MainScript import Test

print(Test.x)
Test.p()

MainScript.py:

from View.Folder1.sub1 import printIt

class Test:
    x = 123
    p = printIt

sub1.py:

def printIt():
    print("printed inside of sub1.py")

当我启动app.py这是输出:

123
printed inside of sub1.py

请注意,MainScript 内部的导入是 from View.Folder1.sub1 import printIt,其中 View 是“上方”文件夹,这被视为您从中导入的 module

【讨论】:

  • 感谢您的回复。所以我必须从根路径(主线程启动的地方,即app.py)导入模块,还是只需要从上面的一个文件夹导入?
  • 您必须将文件夹结构本身视为一个模块,并且您必须指定要导入的文件的“方式”。所以是的,你必须把它看作是你的文件是从“根”文件夹中导入的。
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2013-08-16
  • 2017-04-09
  • 2017-09-19
  • 2021-04-28
相关资源
最近更新 更多