我在同一个文件夹中导入模块时遇到了一个有趣的问题,这有点令人费解。
以下是我的项目目录结构的简化表示:
├── my_project/
│ ├── __init__.py
│ ├── main.py
│ ├── gui_class.py
│ ├── qt_files/
│ | ├── __init__.py
│ │ ├── ui_file.py
│ │ ├── image_conversion.py
问题:在我的main.py
文件中,我正在实例化一个来自gui_class.py
&的课程。从运行ui_file.py
的类调用方法。此文件使用.ui
通过PyQt5从Qt pyuic5
文件转换。 当我调用应创建窗口的方法时,出现错误:
Traceback (most recent call last):
File "main.py", line 12, in <module>
import start_menu
File "~/my_project/gui_class.py", line12, in <module>
from qt_files.ui_file import Ui_File
File "~/my_project/qt_files/ui_file.py", line 166, in <module>
import image_conversion
ModuleNotFoundError: No module named 'image_conversion'
我在这里缺少什么? image_conversion
模块是ui_file.py
的依赖项,毫无疑问与UI文件位于同一目录中。
值得注意的是,ui_file.py
中的任何内容都不应更改。它会自动生成,任何编辑过的内容都会在重新生成时被覆盖。
更新
问题实际上可能出在我在main.py
文件中导入UI文件的方式。
from qt_files.ui_file import Ui_File
我在这里处理的问题是我如何尝试导入我的UI类?请原谅我在这种项目管理方面缺乏经验。谷歌向我展示了很多不同的答案,但它们似乎都不是直截了当的。
**更新2:**
我试图通过将项目剥离到一个非常小的表示中来使用ekhumoro's example,并且我仍然遇到这些错误。
├── noulsmatic_test
│ ├── designer
│ ├── icons
│ ├── noulsmatic.py
│ └── package
│ ├── __init__.py
│ ├── start_menu.py
│ └── ui
│ ├── cchmc_logo_rc.py
│ ├── __init__.py
│ ├── ui_calibration.py
│ ├── ui_controlpanel.py
│ ├── ui_dataprocessing.py
│ ├── ui_savedialog.py
│ └── ui_startmenu.py
简单地说,noulsmatic.py
调用start_menu.py
以便在ui
中使用5个UI文件设置一个非常基本的,功能有限的GUI。但是,start_menu.py
中的导入行导致Pylint错误(E0401
)并给我以下追溯:
Traceback (most recent call last):
File "noulsmatic.py", line 13, in <module>
from package import start_menu
File "/home/alex/Documents/CCHMC/noulsmatic_test/package/start_menu.py", line 12, in <module>
from ui.ui_startmenu import Ui_StartMenu
ModuleNotFoundError: No module named 'ui'
为什么我仍然会收到此错误,即使使用__init__.py
文件和链接示例中的导入样式相同?
**更新3:**
我终于通过将父目录添加到导入行来解决了我的文件在子目录中的导入问题。也许我在我读过的资源中错过了这个,包括ekhumoro的例子(上面链接)。但是,我还有原始问题,即导入我的资源文件。
在ui
包中的每个文件的末尾,有一行import cchmc_logo_rc
,以确保生成的资源代码包含在GUI中。我似乎可以通过更改为import package.ui.cchmc_logo_rc.py
来解决此问题。但是,因为它是由pyuic5
生成的代码,所以我不想更改它。我可以用__init__.py
文件或类似的东西做什么吗?
非常感谢任何帮助。