文章目录
前言
在日常开发的过程,可能会用python写一些小工具,给其他非开发人员使用。为了让更多不懂编程的人使用方便,往往都会直接打包成可执行程序。以下介绍两种平台的程序打包方法,分别为linux下和windows下。打包工具我们采用的是pyinstall
一、Pyinstall是什么?
PyInstaller是一个Python打包工具,它可以将Python代码打包成可执行文件,同时可以在不同的操作系统上进行分发。使用PyInstaller可以避免Python程序的依赖关系问题,这使得Python程序的分发更加方便和可靠。PyInstaller支持多种操作系统,包括Windows、Linux和MacOS等。
二、使用步骤
1.ubuntu环境下使用
(1)安装
- 新建一个conda环境,名为pyinstall。这样做也是为了方便与其他环境隔离
conda create -n pyinstall python=3.8
- 激活环境
source activate pyinstall
- 安装pyinstaller包
python -m pip install pyinstaller
(2)打包程序
- 在终端下新建一个文件,并把打印hello world写入到这个文件中
touch demo.py && echo "print(\"hello world\")" >> demo.py
- 输入下面代码,将其打包成linux可执行程序
pyinstaller --onefile --noconsole demo.py
会在demo.py的同级目录下生成各种文件
(3)使用
- 最终会在dist下生成可执行文件,进入到这个目录,运行可执行文件即可
./demo
可以看到将hello world打印出来
2.在windows环境下使用
(1)安装
-
在菜单栏里找到
Anacodna3
,点击打开终端Anaconda Prompt
-
先输入下面命令,退出当前base环境。
conda deactivate
- 创建一个新的打包的环境,此处名为
pyinstall
。
conda create -n pyinstaller python=3.8
- 安装pyinstaller
python -m pip install pyinstaller
(2)打包程序
- 在文件夹中新建一个demo.py。把下面示例代码填写进去。实现功能很简单在命令控制台打印“hello world”。后面增加了一句
input('Press Enter to exit...')
,其原因是如果没有,程序在执行完hello world后会自动关闭控制台窗口。
# 打印hello worldprint("hello world")input('Press Enter to exit...')
- 在
Anaconda Prompt
中的代码目录下输出如下命令,即可在dist下生成exe文件。
pyinstaller --onefile --console demo.py
(3)使用
- 双击demo.exe就会打开命令控制台看到打印信息,回车会关闭窗口
三、其他
Pyinstaller包的其他功能,读者可以自行在安装包后输入命令寻求说明帮助
pyinstaller -h
下面罗列部分参数的说明
位置参数:
scriptname 要处理的脚本文件的名称,或者恰好一个 .spec 文件。如果指定了 .spec 文件,则大多数选项都是不必要的,并且将被忽略。
可选参数:
-h, --help 显示帮助信息并退出
-v, --version 显示程序版本信息并退出。
–distpath DIR 存放打包应用的路径(默认为./dist)
–workpath WORKPATH 存放所有临时工作文件,.log,.pyz等的路径(默认为./build)
-y, --noconfirm 在不要求确认的情况下替换输出目录(默认为SPECPATH/dist/SPECNAME)
–upx-dir UPX_DIR UPX工具的路径(默认在执行路径中搜索)
-a, --ascii 不包含Unicode编码支持(默认情况下如果可用则包括)
–clean 在构建之前清除PyInstaller缓存并删除临时文件。
–log-level LEVEL 在构建时控制台消息的详细程度。LEVEL可以是TRACE、DEBUG、INFO、WARN、DEPRECATION、ERROR、FATAL之一(默认为INFO)。也可以通过设置PYI_LOG_LEVEL环境变量来覆盖它。
要生成的内容:
-D, --onedir 创建一个包含可执行文件的单个文件夹捆绑包(默认)
-F, --onefile 创建一个单个文件的捆绑可执行文件。
–specpath DIR 存储生成的spec文件的文件夹(默认为当前目录)
-n NAME, --name NAME 分配给打包应用和spec文件的名称(默认为第一个脚本的基本名称)
打包内容,搜索路径:
–add-data
需要添加到可执行文件中的额外非二进制文件或文件夹。路径分隔符是平台特定的,os.pathsep(在Windows上是;,在大多数Unix系统上是:)被使用。此选项可以多次使用。
–add-binary
需要添加到可执行文件中的额外二进制文件。有关更多详细信息,请参见 --add-data 选项。此选项可以多次使用。
-p DIR, --paths DIR 用于搜索导入的路径(类似于使用PYTHONPATH)。可以使用多个路径,用“:”分隔,或多次使用此选项。相当于在spec文件中提供 pathex 参数。
–hidden-import MODULENAME, --hiddenimport MODULENAME
命名在脚本代码中不可见的导入。此选项可以多次使用。
–collect-submodules MODULENAME
从指定的包或模块中收集所有子模块。此选项可以多次使用。
–collect-data MODULENAME, --collect-datas MODULENAME
从指定的包或模块中收集所有数据。此选项可以多次使用。
–collect-binaries MODULENAME
从指定的包或模块中收集所有二进制文件。此选项可以多次使用。
–collect-all MODULENAME
从指定的包或模块中收集所有子模块,数据文件和二进制文件。此选项可以多次使用。
–copy-metadata PACKAGENAME
复制指定包的元数据。此选项可以多次使用。
–recursive-copy-metadata PACKAGENAME
复制指定包及其所有依赖项的元数据。此选项可以多次使用。
–additional-hooks-dir HOOKSPATH
用于搜索钩子的额外路径。此选项可以多次使用。
–runtime-hook RUNTIME_HOOKS
自定义运行时钩子文件的路径。运行时钩子是与可执行文件捆绑的代码,在任何其他代码或模块之前执行,以设置运行时环境的特殊功能。此选项可以多次使用。
–exclude-module EXCLUDES
可选的模块或包(Python名称,而不是路径名称),将被忽略(就像未找到一样)。此选项可以多次使用。
–splash IMAGE_FILE (实验性的)在应用程序中添加一个带有IMAGE_FILE图像的启动画面。启动画面可以在解压缩过程中显示进度更新。
如何生成:
-d 或 --debug 选项可以提供调试冻结应用程序的帮助。可以多次使用该选项选择以下几个选项之一:
all:所有以下选项。
-imports:指定-v选项到底层的Python解释器,导致每次初始化模块时打印一条消息,显示从哪个地方(文件名或内置模块)加载。请参见https://docs.python.org/3/using/cmdline.html#id4。
-bootloader:告诉引导加载程序在初始化和启动捆绑应用程序时发出进度消息。用于诊断缺少导入的问题。
-noarchive:将所有冻结的Python源文件存储为存档文件而不是存储在结果输出目录中的文件。
–python-option PYTHON_OPTION 选项可以指定在运行时传递给Python解释器的命令行选项。目前支持“v”(相当于“–debug imports”),“u”和“W ”。
-s 或 --strip 选项可以对可执行文件和共享库应用符号表剥离操作(不推荐在Windows上使用)。
–noupx 选项可以禁用 UPX,即使它可用(在Windows和Unix系统之间的工作方式不同)。
–upx-exclude FILE 选项可以在使用 upx 时防止二进制文件被压缩。如果 upx 在压缩期间破坏某些二进制文件,则通常使用此选项。FILE 是二进制文件的文件名,不包括路径。可以多次使用此选项。
Windows和Mac OS X特定选项:
-c,–console,–nowindowed
打开标准I/O的控制台窗口(默认)。在Windows上,如果第一个脚本是’.pyw’文件,则此选项无效。
-w,–windowed,–noconsole
Windows和Mac OS X:不为标准I/O提供控制台窗口。在Mac OS上,这也会触发构建Mac OS .app捆绑包。在Windows上,如果第一个脚本是’.pyw’文件,则此选项会自动设置。此选项在*NIX系统上被忽略。
-i,–icon
FILE.ico:将图标应用于Windows可执行文件。FILE.exe,ID:从exe中提取具有ID的图标。FILE.icns:将图标应用于Mac OS上的.app捆绑包。如果输入的图像文件不是平台格式(Windows上的ico,Mac上的icns),PyInstaller将尝试使用Pillow将图标转换为正确的格式(如果安装了Pillow)。使用“NONE”不应用任何图标,从而使操作系统显示一些默认设置(默认值:应用PyInstaller的图标)。此选项可以多次使用。
–disable-windowed-traceback
在窗口(noconsole)模式下禁用未处理异常的回溯转储(仅适用于Windows和macOS),并显示一条消息指出此功能已被禁用。
Windows 特定选项:
–version-file FILE 从 FILE 中添加版本资源到可执行文件中。
-m, --manifest
将 MANIFEST 文件或 XML 添加到可执行文件中。
–no-embed-manifest 生成一个外部的 .exe.manifest 文件而不是将 MANIFEST 嵌入到可执行文件中。仅适用于 onedir 模式;在 onefile 模式下,不论此选项如何,MANIFEST 都始终被嵌入。
-r RESOURCE, --resource RESOURCE
将资源添加或更新到 Windows 可执行文件中。RESOURCE 是一个到四个条目,格式为 FILE[,TYPE[,NAME[,LANGUAGE]]]。FILE 可以是数据文件或 exe/dll。对于数据文件,至少必须指定 TYPE 和 NAME。LANGUAGE 默认为 0 或可以指定为通配符 * 以更新给定类型和名称的所有资源。对于 exe/dll 文件,如果省略或将 TYPE、NAME 和 LANGUAGE 指定为通配符 *,则将从 FILE 添加/更新所有资源到最终可执行文件中。此选项可以多次使用。
–uac-admin 使用此选项将创建一个请求启动时提升权限的 MANIFEST。
–uac-uiaccess 使用此选项允许升级的应用程序在远程桌面上使用。
总结
本文仅仅简单介绍了pyinstaller在ubuntu和windows下打包python程序为可执行程序的方法,不过并未介绍在ubuntu开发环境下实现打包win10可执行文件exe的方法,如果要这么做,需要进行交叉编译,即在 Ubuntu 中生成适用于 Windows 的二进制文件。为此,你需要安装交叉编译工具链和适用于 Windows 的 Python。需要通过安装wine来安装适用于windows版本的python,需要修改“demo.spec”文件,使他包含适用于Windows的选项。这些步骤把问题复杂化了,远不如直接在对应平台上进行打包操作
来源地址:https://blog.csdn.net/PellyKoo/article/details/129375361