Python打包

1. 用pip安装pyinstaller

pip install pyinstaller

 

2. 将py代码生成可执行文件

pyinstaller -F -w -i 'xxx.ico' xxx.py

-F: 产生单个可执行文件
-w: 不显示控制台
-i: 添加图标

# 注意,-F -w -i都是可选项,最简单打包代码为pyinstaller xxx.py,默认情况下会生成exe及其依赖的dll

如:

生成的可执行文件在dist文件夹中 

 

 

在Qt中,将图片/图标资源整合进python文件中,使生成文件更精简

在程序中用到图片/图标等的情况下,最后生成.exe可执行程序时,还得把这个图片放到相同的目录里,这样打包出来的exe还带了个图片,实在是不太方便,因此可以用Qt中的资源系统把图片资源转化为py文件,这样最后生成的只有一个exe文件。

  1. 用记事本或者vim写一个qrc文件
<RCC>
    <qresource prefix="/">
        <file>logo.ico</file>
    </qresource>
</RCC>
  1. 把qrc转换为py文件:pyrcc5 -o src.py  src.qrc
  2. 在代码中import src ,然后在代码中调用此图片
  3. 最后pyinstaller -F -w -i 'logo.ico' test.py

完整的Qt代码如下

import sys
import src

from PyQt5 import QtGui, QtWidgets, QtCore
from PyQt5.QtWidgets import QApplication


class MainWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)

        main_layout = QtWidgets.QVBoxLayout()
        btn = QtWidgets.QPushButton('Button')
        main_layout.addWidget(btn)

        self.setWindowIcon(QtGui.QIcon(':/logo.ico'))
        self.setLayout(main_layout)
        self.setMinimumSize(QtCore.QSize(640, 480))
        self.show()

        print(sys.path)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

 

 

一些错误情况

问题:包含vtk的代码打包后运行闪退,控制台显示ModuleNotFoundError: No module named 'vtkmodules.all'

解决方法:将导入vtk的方式改为如下代码即可

import vtkmodules.all as vtk
from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor

 

问题:Linux下执行pystaller命令出现:OSError: Python library not found: libpython3.9m.so, libpython3.9m.so.1.0, libpython3.9.so.1.0, libpython3.9mu.so.1.0...

解决方案:安装上python2和python3的devel即可

sudo apt install python-dev
sudo apt install python3-dev

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值