【Python】pyinstaller 模块 _ 生成可执行程序

pyinstaller 命令行打包

安装模块

# 安装
> pip install pyinstaller

# 升级模块版本
> pip install --upgrade pyinstaller
#  安装成功时打印
Successfully installed pyinstaller-4.5.1

 

参数

参数 用法
-F 生成结果是一个 exe 文件,所有的第三方依赖、资源和代码均被打包进该 exe 内
-D 生成结果是一个目录,各种第三方依赖、资源和 exe 同时存储在该目录(默认)
-a 不包含unicode支持
-d 执行生成的 exe 时,会输出一些log,有助于查错
-w 不显示命令行窗口
-c 显示命令行窗口(默认)
-p 指定额外的 import 路径,类似于使用 python path
-i 指定图标
-v 显示版本号
-n 生成的 .exe 的文件名

--add-data [file:dir]:添加数据文件。如果有多个文件需要添加,本选项可以出现多次。参数的格式为文件名+输出目录名,用路径分隔符分割,在 Windows 下使用 ;,其它系统下则使用 :。 如果输出到和脚本相同的目录,则使用 . 作为输出目录。
--add-binary [file:dir]:添加二进制文件,即运行程序所需的.exe/.dll/.so 等。

 

 

语法

# -F 产生单个的可执行文件
# cmd 命令行路径为文件目录:Z:\package\files, 生成文件存放在Z:\package\files
Z:\package\files> pyinstaller -F protion.py

# -D 产生一个目录(包含多个文件)作为可执行程序
# cmd命令行路径非文件目录,生成文件存放在路径 Z:\ 下
Z:\> pyinstaller -D Z:\xxx\xxx\protion.py

 

执行命令后会在当前目录 生成文件

  main.spec 文件:其前缀和脚本名相同,指定了打包时所需的各种参数;
  build 目录:其中存放打包过程中生成的临时文件。

  warnxxxx.txt文件记录了生成过程中的警告/错误信息。如果 PyInstaller 运行有问题,需要检查warnxxxx.txt文件来获取错误的详细内容。

  xref-xxxx.html文件输出 PyInstaller 分析脚本得到的模块依赖关系图。
  dist目录:存放生成的最终文件。如果使用单文件模式将只有单个执行文件;如果使用目录模式的话,会有一个和脚本同名的子目录,其内才是真正的可执行文件以及附属文件。

 

 

 

遇到的问题:

找不到依赖包

> pyinstaller -F protion.py
PyInstaller cannot check
for assembly dependencies. Please install pywin32-ctypes. pip install pywin32-ctypes

 根据提示安装pywin32-ctypes

> pip install pywin32-ctypes
Looking
in indexes: http://pypi.douban.com/simple Requirement already satisfied: pywin32-ctypes in c:\users\thinkpad\appdata\local\programs\python\python38-32\lib\site-packages (0.2.0) 

解决方法:

# 第一步:
# 查看已安装需要升级的模块
> pip list -o 

# 如果存在新版本 升级模块成功后进行第二步
> pip install --upgrade pyinstaller

# 已是最新版本则直接配置第二步

# 第二步
# python安装模块路径进入Lib/site-packages/Pyinstaller中找到compat.py文件
# 示例:C:\Users\ThinkPad\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\PyInstaller   compat.py

# 打开文件搜索 win32ctypes
if is_win:
    try:
        from win32ctypes.pywin32 import pywintypes  # noqa: F401
        from win32ctypes.pywin32 import win32api
    except ImportError:
        # This environment variable is set by setup.py
        # - It's not an error for pywin32 to not be installed at that point
        if not os.environ.get('PYINSTALLER_NO_PYWIN32_FAILURE'):
            raise SystemExit('PyInstaller cannot check for assembly dependencies.\n'
                             'Please install pywin32-ctypes.\n\n'
                             'pip install pywin32-ctypes\n')

将原有的:
        from win32ctypes.pywin32 import pywintypes  # noqa: F401
        from win32ctypes.pywin32 import win32api
修改为:
        #from win32ctypes.pywin32 import pywintypes  # noqa: F401
        #from win32ctypes.pywin32 import win32api
        import pywintypes
        import win32api

 

posted @ 2021-09-07 16:52  Phoenixy  阅读(203)  评论(0编辑  收藏  举报