PyQt5 项目结构和 PyInstaller ModuleNotFoundError



我正在将我的 PyQt5 应用程序构建为更成熟的约定。现在看起来像这样

MyProj
├── my_qt_tool
│   ├── __init__.py
│   ├── class1.py
│   ├── my_qt_tool.py
│   ├── wizard1.py
│   ├── resources
│   │   └── templates
│   │       └── tool.conf.template
│   └── ui
│       ├── __init__.py
│       ├── mainwindow.py
│       ├── mainwindow.ui
│       ├── wizard_01_start.py
│       ├── wizard_01_start.ui
│       ├── ...
├── my_qt_tool.spec # for PyInstaller
├── bin
│   └── generate_ui_code.py # for compiling Qt *.ui to *.py
├── dist
│   └── my_qt_tool
├── environment.yml # conda environment requirements.
├── LICENSE
└── README.md

所以MyProj是顶级 git 存储库,my_qt_tool是我的应用程序的包,有一个用于 UI 特定代码的子包,my_qt_tool.py包含运行 GUI 的"主"代码,class1.py处理业务逻辑,wizard1.py只是 GUI 向导的一些额外类。

Q1:此项目结构是否规范?主要功能是否在应有的位置?应该将 *.ui 文件分隔到resources吗?

现在,经过一些与导入讨价还价之后,我将my_qt_tool作为源目录添加到 pycharm 以使导入正常工作,并使用工作目录MyProj/my_qt_tool创建了my_qt_tool.py运行。

Q2:从技术上讲,我希望工作目录是MyProj的,但是我将不得不用my_qt_tool/resources..引用resources/templates/tool.conf.template,这似乎很糟糕......还是

这样做的方法?现在,my_qt_tool中的导入如下所示:

from class1 import DataModel
from ui.mainwindow import Ui_MainWindow
...

所以没有相对进口之类的,因为所有东西都在同一个包装中,对吧?(再次:为了完成这项工作,我不得不在我的 PyCharm 项目设置中添加my_qt_tool作为源目录......

Q3:好的,现在不起作用的东西。在规范文件上运行 PyInstaller,该文件几乎与Analysis(['my_qt_tool/my_qt_tool.py'], ...一起,生成的二进制文件无法启动,并显示错误消息:ModuleNotFoundError: No Module named 'class1'。我该如何解决这个问题?

Q1

如果项目要变大,您可以创建特定于模块的文件夹,每个模块都有 PY 和 GUI 文件。 将其构建为 MVC 项目文件夹。 对于 mvc 的文件夹结构:https://www.tutorialsteacher.com/mvc/mvc-folder-structure 这里和这里是 hov 模型视图架构可以在 https://www.learnpyqt.com/courses/model-views/modelview-architecture/实现。

第 2 季度

在应用程序引导时读取资源/模板/工具.conf.模板,而不是静态引用。 这可以generate_ui_code.py完成,以将所有配置作为应用程序参考的一部分加载

所以没有相对进口之类的,因为所有东西都在同一个包装中,对吧?(再次:为了完成这项工作,我不得不在我的 PyCharm 项目设置中添加my_qt_tool作为源目录......

如果正确引导,则无需添加my_qt_tool

第三季度

将这 2 行添加到等级库文件的顶部

import sys
sys.setrecursionlimit(5000)

如果您仍然遇到与 Class1 相关的问题,请尝试将其导入到为您的案例调用 pyinstaller 的地方,其my_qt_tool.py

首先修复 pyinstaller 问题,然后考虑使用模型视图约定重构文件夹结构。

以下是一些相当大的项目示例

  • https://wiki.python.org/moin/PyQt/SomeExistingApplications
  • https://github.com/topics/pyqt5-desktop-application

相关内容

  • 没有找到相关文章

最新更新