美文网首页pyqt
pyqt打包_pyinstaller

pyqt打包_pyinstaller

作者: jmukirin | 来源:发表于2017-04-27 17:23 被阅读711次

    官网

    https://github.com/pyinstaller/pyinstaller
    http://www.pyinstaller.org/

    安装

    稳定版本(反而有bug)

    ➜  pip3 install pyinstaller
    ➜  pyinstaller --version
    3.2.1
    

    dev版本(本文写作是用它)

    ➜  git clone https://github.com/pyinstaller/pyinstaller.git
    ➜  cd pyinstaller
    ➜  python3 setup.py install
    ➜  pyinstaller --version
    3.3.dev0+964547c
    

    hello.py 的内容

    # -*- coding: utf-8 -*-
    """第一个程序"""
    from PyQt5 import QtWidgets
    import sys
    app = QtWidgets.QApplication(sys.argv)
    first_window = QtWidgets.QWidget()
    first_window.resize(400, 300)
    first_window.setWindowTitle("我的第一个程序")
    first_window.show()
    sys.exit(app.exec_())
    

    mac打包

    简单打包
    https://pyinstaller.readthedocs.io/en/stable/usage.html#general-options

    ➜  sudo pyinstaller -w -y hello.py
    

    完成后的目录

    ├── __pycache__
    ├── build
    │   └── hello
    ├── dist
    │   ├── hello
    │   └── hello.app
    │       └── Contents
    │           ├── Frameworks
    │           ├── Info.plist
    │           ├── MacOS
    ├── hello.py
    └── hello.spec
    
    

    会多出3个目录pycache, build, dist和一个文件hello.spec

    其中的 dist目录下, 有两份输出

    dist/hello/          unix的可执行目录(mac下也能运行)
    dist/hello.app    macOS的程序包(其实也是一个目录)
    

    spec文件

    spec文件的作用是什么呢?PyInstaller通过执行spec文件中的内容来生成app,有点像makefile。正常使用中我们是不需要管spec文件的,但是下面几种情况需要修改spec文件:

    • 需要打包资源文件
    • 需要include一些PyInstaller不知道的run-time库
    • 为可执行文件添加run-time 选项
    • 多程序打包

    也可以通过下面命令生成spec文件
    pyi-makespec hello.py

    通过下面命令使用spec文件
    sudo pyinstaller hello.spec

    当你使用了spec文件, 那么命令行里的参数只剩下下面的几个还有效, 其它的都被spec文件里的参数覆盖了:

    参数 备注
    --upx-dir UPX_DIR Path to UPX utility (default: search the execution path)
    --distpath DIR Where to put the bundled app (default: ./dist)
    --workpath WORKPATH Where to put all the temporary work files, .log, .pyz and etc. (default: ./build)
    -y, --noconfirm Replace output directory (default: SPECPATH/dist/SPECNAME) without asking for confirmation
    -a, --ascii Do not include unicode encoding support (default: included if available)

    spec文件的配置

    # -*- mode: python -*-
    
    block_cipher = None
    
    a = Analysis(['main.py'],
                 pathex=['/Users/kirin/workspaces/gitlab/pqbox'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              exclude_binaries=True,
              name='main',
              debug=False,
              strip=False,
              upx=True,
              console=True )
    coll = COLLECT(exe,
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=True,
                   name='main')
    

    spec文件中主要包含4个class: Analysis, PYZ, EXE和COLLECT.

    • Analysis以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息
    • PYZ是一个.pyz的压缩包,包含程序运行需要的所有依赖
    • EXE根据上面两项生成
    • COLLECT生成其他部分的输出文件夹,COLLECT也可以没有

    要看更详细的文档在
    https://pyinstaller.readthedocs.io/en/stable/usage.html#general-options
    https://pyinstaller.readthedocs.io/en/stable/spec-files.html

    windows打包

    windows下要加--path参数来找到pyqt的dll

    pyinstaller --path C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\Lib\site-packages\PyQt5\Qt\bin -y -w hello.py
    

    相关文章

      网友评论

        本文标题:pyqt打包_pyinstaller

        本文链接:https://www.haomeiwen.com/subject/djhnzttx.html