zoukankan      html  css  js  c++  java
  • pyinstaller打包自己的python程序

    使用Pyinstaller打包步骤如下

    1. 安装pyinstaller

    pip install pyinstaller 
    

    查看安装的版本

    pyinstaller --version
    

    2. 给脚本加密

    pyinstaller myscript.py (主程序文件)
    

    PyInstaller会在您的脚本中找到所有import语句。 它找到导入的模块并在其中查找import语句,依此类推,直到它具有脚本可能使用的完整模块列表。
    Pyinstaller能够识别大部分常见的python包,包括GUI库,但是也有些包无法识别或者导入的时候监测不到。这个时候你需要:在spec文件里面指定需要导入的包。

    一般操作方法:
    你可以先尝试直接运行上面的命令,会自动生成spec文件,默认是放在当前文件夹下,如果成功则不需要修改。如果PyInstaller自动生成的spec文件并不能满足我们的需求。
    会报错提示程序依赖我们本地的一些数据文件,这个时候就需要我们自己去编辑spec文件来添加数据文件。

    3. 常见spec文件参数

    block_cipher = None
    a = Analysis(['minimal.py'],
         pathex=['/Developer/PItests/minimal'],
         binaries=None,
         datas=None,
         hiddenimports=[],
         hookspath=None,
         runtime_hooks=None,
         excludes=None,
         cipher=block_cipher)
    pyz = PYZ(a.pure, a.zipped_data,
         cipher=block_cipher)
    exe = EXE(pyz,... )
    coll = COLLECT(...)
    

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

    4. 常见错误解决方式

    ImportError: DLL load failed: 找不到指定的模块

    在.spec文件中:

    a = Analysis(...
        binaries=[('/path/to/some.dll', '.'), ... ],
        ...)
    

    ModuleNotFoundError: No module named 'xxxxxx'

    在.spec文件中:

    a = Analysis(...
        hiddenimports=['some.module', ... ],
        ...)
    

    如果我们需要添加没有打包的数据信息,可以将上访的data改为

    a.datas +=[(test.ico','D:\Test\python\test.ico','DATA')]
    

    修改后再执行spec文件,即生效添加内容。

    pyinstaller test.spec 
    

    参考来源:

    1. http://legendtkl.com/2015/11/06/pyinstaller/
    2. https://pyinstaller.readthedocs.io/en/stable/spec-files.html#using-spec-files
    3. https://www.cnblogs.com/yemeng/p/6253097.html
  • 相关阅读:
    Linux -- nginx
    Linux--虚拟环境
    Linux用户权限指令, 定时任务等指令
    Linux的基础命令, django的安装与使用
    .net与Java的WebService互调
    C#中的动态特性
    LINQ之路(3):LINQ扩展
    LINQ之路(2):LINQ to SQL本质
    LINQ之路(1):LINQ基础
    LINQ之路系列文章导读
  • 原文地址:https://www.cnblogs.com/everfight/p/pyinstaller.html
Copyright © 2011-2022 走看看