python PyQt环境搭建以及打包、打包遇到的问题,包括找不到包的总结: ModuleNotFoundError: No module named

Python 和 PyQt 结合可以用来创建桌面应用程序。PyQt 是一个 Python 绑定的跨平台 GUI 工具集,它使得开发者能够使用 Python 语言调用 Qt 库中的类和函数。

PyQt 是 Qt 框架的 Python 版本,Qt 本身是一个十分成熟的商业 GUI 框架,底层使用 C++进行开发。PyQt 是 Python 对 Qt 的包装,具有扩展性强、跨平台、显示效果好的优点,其次 PyQt 的接口和 Qt 的完全一致,所以采用 PyQt 开发 GUI 后期可以转 C++开发 Qt。需要注意的是,PyQt 有两种许可协议,分别是 GPLv3许可证和需要购买版权的商业许可证,GPLv3是强开源协议,意味着,如果你的应用程序里面使用了 PyQt,那么你的程序必须开源,否则法院传票了解一下,因此如果想要闭源商用,必须购买 Riverbank Computing 公司的商业许可证,目前 PyQt 已经推出了 PyQt 6,在 PyQt 5 的基础上对部分模块进行了升级,并添加一些新功能。

环境搭建

安装 PyQt

直接使用 pip 进行安装

pip install PyQt5 
pip install pyqt5-tools

如果下载速度过慢可以使用国内镜像

pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple 
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

环境配置

配置 Pycharm 环境,我们需要配置 3 样东西:

  1. Qt Designer;
  2. Pyuic;
  3. Pyrcc;
Qt Designer

在 Pycharm 中,依次打开 File → Settings → Tools → External Tools,点击 + Create Tool,配置如下: 

Name:QtDesigner
Program:C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\qt5_applications\Qt\bin\designer.exe(请根据实际修改)
Working directory: $FileDir$

Pyuic

在 Pycharm 中,依次打开 File → Settings → Tools → External Tools,点击 + Create Tool,配置如下:

Name: Pyuic
Program: D:\Program Files\Python38\python.exe(请根据实际修改)
Arguments: -m PyQt5.uic.pyuic $FileName$ -o Ui_$FileNameWithoutExtension$.py
Working directory: $FileDir$

Pyrcc

在 Pycharm 中,依次打开 File → Settings → Tools → External Tools,点击 + Create Tool,配置如下:

Name: PyRCC
Program : D:\Python38\Scripts\pyrcc5.exe(请根据实际修改)
Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py
Working directory: $FileDir$

验证及创建窗体程序

在 Pycharm 中打开 Qt-Designer。在左侧控件栏中拖拽组件并设置名称和位置,最后保存文件到目录。

使用pyuic工具将 .ui 文件转换成 .py 文件(对着ui文件右键,在功能菜单中找到pyuic),输入以下代码:

运行程序

结果如下:

                 

打包exe

要将使用PyQt编写的Python应用程序打包成可执行的.exe文件,您可以使用几种不同的工具。以下是一些常用的工具和方法:

使用PyInstaller

  1. 安装PyInstaller: 打开命令行窗口并运行以下命令来安装PyInstaller:

    pip install pyinstaller
    
  2. 打包应用程序: 进入包含您的Python脚本(例如main.py)的目录,并运行以下命令:

    pyinstaller --windowed --onefile main.py
    

    这里,--windowed选项表示应用程序是一个图形界面应用程序,--onefile选项表示将所有文件打包成一个单一的.exe文件。

  3. 运行生成的可执行文件: 打包完成后,在dist目录中会找到生成的.exe文件。双击它即可运行您的应用程序。

使用cx_Freeze

  1. 安装cx_Freeze: 在命令行中运行以下命令来安装cx_Freeze:

    pip install cx_Freeze
    
  2. 创建设置脚本: 创建一个名为setup.py的Python脚本,内容如下:

    from cx_Freeze import setup, Executable
    
    setup(
        name = "YourAppName",
        version = "0.1",
        description = "A description",
        executables = [Executable("main.py")]
    )
    
  3. 打包应用程序: 在命令行中运行以下命令来构建.exe文件:

    python setup.py build
    

    生成的.exe文件将位于build目录下的子目录中。

建议使用PyInstaller,比较方便

 pyinstaller --windowed --onefile main.py

打包运行问题

常见问题一:ModuleNotFoundError: No module named 'xxx‘

可能是由几个原因造成的:

  1. 模块不存在:你可能没有安装名为 ‘xxx’ 的模块,或者该模块的确不存在。
  2. 模块名称错误:你可能打错了模块的名称。
  3. 模块路径问题:模块可能存在,但不在 Python 的模块搜索路径中。

排查完以上问题后,有多种方式处理,

  • 粗暴快捷方式
  • 在自己模块文件夹目录下创建名为“__init__.py”的空文件,

    创建完目录类似如下:

    ├── PyQt
    │ ├── main.py
    │ ├── __init__.py
    │ ├── form1.py

    因为系统就会先运行 __init__.py 然后表示PyQt这是个文件包,里面的文件可以用来引用.

  • 其他方式
  • hidden-import

    对于PyInstaller,你可以使用 --hidden-import 选项来包含那些PyInstaller可能没有自动检测到的模块。

    pyinstaller –hidden-import xxxx your_script.py

    检查spec文件

    如果你在PyInstaller中使用spec文件来打包应用程序,确保在 Analysis 对象中包含了所有必需的路径和模块。

    例如:

    a = Analysis(['your_script.py'],
                 pathex=['path_to_your_module'],
                 binaries=[],
                 datas=[],
                 hiddenimports=['xxxx'],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    

    使用 spec 文件打包

    使用修改后的 spec 文件,然后在命令行中运行以下命令来构建最终的 exe 文件:

    pyinstaller your_script.spec
    

    作者:Felix_Fly

    物联沃分享整理
    物联沃-IOTWORD物联网 » python PyQt环境搭建以及打包、打包遇到的问题,包括找不到包的总结: ModuleNotFoundError: No module named

    发表回复