Python 3.x 未找到python模块中的意外行为

Python 3.x 未找到python模块中的意外行为,python-3.x,pyqt5,centos8,Python 3.x,Pyqt5,Centos8,我正在尝试构建一个PyQt5 GUI应用程序。我在Centos-8上安装了python3.6和pyqt5。 目录结构如下: Workspace/ ├── app.py ├── Controller ├── Model └── View ├── ContentLayout │   ├── UserActions │   │   └── ButtonLayout.py │   └── UserInput │   └── TextInputLayout.

我正在尝试构建一个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()
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")

# 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

main menu.py:

# This is main application
from View.mainMenu import MenuDesign

if __name__ == "__main__":
    test = MenuDesign()
    test.genereateLayout()
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")

# 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

TextInputLayout.py:

# This is main application
from View.mainMenu import MenuDesign

if __name__ == "__main__":
    test = MenuDesign()
    test.genereateLayout()
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")

# 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'
回溯(最近一次呼叫最后一次):
文件“app.py”,第1行,在
从View.Main菜单导入菜单设计
文件“/home/amarjeets/Workspace/View/mainMenu.py”,第2行,在
从ContentLayout.UserInput.TextInputLayout导入TextInput
ModuleNotFoundError:没有名为“ContentLayout”的模块
我尝试将
\uuuu init\uuuuuuuy.py
文件放入
视图
内容布局
用户输入
文件夹,但所有排列/组合仍然存在相同的错误
在python中导入一个给定项目文件夹/文件结构(如我的项目文件夹/文件结构)的模块/类/函数时,是否需要遵循任何规则或一般准则?


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

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()
from View.Folder1.sub1 import printIt

class Test:
    x = 123
    p = printIt
def printIt():
    print("printed inside of sub1.py")
MainScript.py

from View.MainScript import Test

print(Test.x)
Test.p()
from View.Folder1.sub1 import printIt

class Test:
    x = 123
    p = printIt
def printIt():
    print("printed inside of sub1.py")
sub1.py

from View.MainScript import Test

print(Test.x)
Test.p()
from View.Folder1.sub1 import printIt

class Test:
    x = 123
    p = printIt
def printIt():
    print("printed inside of sub1.py")
当我启动app.py时,这是输出:

123
printed inside of sub1.py

请注意,
MainScript
内部的导入是
from View.Folder1.sub1 import printIt
,其中
View
是“上方”文件夹,它被视为导入的
模块。

我有以下文件夹结构:

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()
from View.Folder1.sub1 import printIt

class Test:
    x = 123
    p = printIt
def printIt():
    print("printed inside of sub1.py")
MainScript.py

from View.MainScript import Test

print(Test.x)
Test.p()
from View.Folder1.sub1 import printIt

class Test:
    x = 123
    p = printIt
def printIt():
    print("printed inside of sub1.py")
sub1.py

from View.MainScript import Test

print(Test.x)
Test.p()
from View.Folder1.sub1 import printIt

class Test:
    x = 123
    p = printIt
def printIt():
    print("printed inside of sub1.py")
当我启动app.py时,这是输出:

123
printed inside of sub1.py

请注意,
MainScript
内部的导入是
from View.Folder1.sub1 import printIt
,其中
View
是“上面”的文件夹,这被算作您导入的
模块。

我认为您必须在
app.py
文件夹中有一个
\uuuu init\uuuuuuuuuuuupy
,它才能工作。@hampusralson先生。。我也查过了。。。同样的错误。我甚至把
\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
放在所有文件夹中,但仍然是同一个错误。我认为你必须在
app.py
文件夹中有一个
\uuuuuuuuuuuuuuuuuuuuuuu。。我也查过了。。。同样的错误。我甚至把
\uuuu init\uuuuu.py
放在所有的文件夹中,仍然是相同的错误。谢谢你的回复。因此,我必须从根路径(主线程启动的地方,即app.py)导入模块,或者我只需要从上面的一个文件夹导入?您必须将文件夹结构本身视为一个模块,并且必须指定要导入的文件的“方式”。因此,是的,您必须将其视为您的文件是从“根”文件夹导入的。谢谢您的确认。。。。这真的很有帮助。谢谢你的回复。因此,我必须从根路径(主线程启动的地方,即app.py)导入模块,或者我只需要从上面的一个文件夹导入?您必须将文件夹结构本身视为一个模块,并且必须指定要导入的文件的“方式”。因此,是的,您必须将其视为您的文件是从“根”文件夹导入的。谢谢您的确认。。。。这真的很有帮助。