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 样东西:
- Qt Designer;
- Pyuic;
- 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
-
安装PyInstaller: 打开命令行窗口并运行以下命令来安装PyInstaller:
pip install pyinstaller
-
打包应用程序: 进入包含您的Python脚本(例如
main.py
)的目录,并运行以下命令:pyinstaller --windowed --onefile main.py
这里,
--windowed
选项表示应用程序是一个图形界面应用程序,--onefile
选项表示将所有文件打包成一个单一的.exe
文件。 -
运行生成的可执行文件: 打包完成后,在
dist
目录中会找到生成的.exe
文件。双击它即可运行您的应用程序。
使用cx_Freeze
-
安装cx_Freeze: 在命令行中运行以下命令来安装cx_Freeze:
pip install cx_Freeze
-
创建设置脚本: 创建一个名为
setup.py
的Python脚本,内容如下:from cx_Freeze import setup, Executable setup( name = "YourAppName", version = "0.1", description = "A description", executables = [Executable("main.py")] )
-
打包应用程序: 在命令行中运行以下命令来构建
.exe
文件:python setup.py build
生成的
.exe
文件将位于build
目录下的子目录中。
建议使用PyInstaller,比较方便
pyinstaller --windowed --onefile main.py
打包运行问题
常见问题一:ModuleNotFoundError: No module named 'xxx‘
可能是由几个原因造成的:
- 模块不存在:你可能没有安装名为 ‘xxx’ 的模块,或者该模块的确不存在。
- 模块名称错误:你可能打错了模块的名称。
- 模块路径问题:模块可能存在,但不在 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