侧边栏壁纸
博主头像
EinTao博主等级

昨天再好,也走不回去;明天再难,也要抬脚继续。

  • 累计撰写 32 篇文章
  • 累计创建 3 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

python工程打包成exe的四种方式

EinTao
2024-04-26 / 0 评论 / 0 点赞 / 54 阅读 / 1,494 字

在Python中,将项目打包成可执行的exe文件是一个常见的任务,尤其是在需要分发应用程序给没有安装Python环境的用户时。下面是几种主流的方式及其参数的含义和使用案例。推介使用Pyinstaller和Nuitka,前者最常用,后者打包后防止反编译,且软件小执行快。

PyInstaller

PyInstaller是打包Python程序最流行的工具之一,它可以生成独立可执行的程序。

参数及其作用

打包类型:

  • -F, --onefile:生成单个可执行文件。
  • -D, --onedir:生成包含多个文件的可执行目录(默认选项)。
  • -w, --windowed:不显示控制台窗口(对于GUI应用)。
  • -c, --console:显示控制台窗口(默认选项,对于命令行应用)。
  • --service:生成Windows服务程序。

可执行文件名和图标:

  • -n, --name:指定生成可执行文件的名称。
  • -i, --icon:指定可执行文件的图标。

资源文件和数据文件:

  • --add-data:添加非Python文件到可执行文件中(格式:<SRC;DEST or SRC:DEST>)。
  • --hidden-import:包括PyInstaller可能检测不到的隐藏导入。
  • --add-binary:添加二进制文件。
  • --add-resource:添加资源文件。

优化和压缩:

  • --upx:使用UPX压缩可执行文件(如果已安装UPX)。
  • --noupx:不使用UPX压缩可执行文件。

清理和调试:

  • --clean:在打包之前清除缓存和临时文件。
  • --log-level:设置日志级别(DEBUG, INFO, WARN, ERROR, CRITICAL)。

其他:

  • --runtime-tmpdir:指定运行时临时文件的目录。
  • --version-file:指定包含版本信息的文件。
  • --strip:去除二进制文件中的符号信息。

pyinstaller打包时的加密

通过修改spec文件,添加运行时选项来增强安全性。虽然PyInstaller本身不直接支持加密功能,但你可以通过以下方式修改spec文件:


# 在spec文件中添加以下内容

# hooks/hook-encodings.py 是一个示例,具体情况可能需要根据你使用的库进行修改

a = Analysis(['your_script.py'],

pathex=['path_to_your_script'],

binaries=[],

datas=[],

hiddenimports=[],

hookspath=[],

hooksconfig={},

runtime_hooks=['hooks/hook-encodings.py'], # 添加你的运行时钩子

excludes=[],

win_no_prefer_redirects=False,

win_private_assemblies=False,

cipher=1, # 这将启用加密.pyc文件的功能(需要使用--key参数)

noarchive=False)

使用--key参数给PyInstaller命令行提供一个密钥来加密.pyc文件:

pyinstaller --key your_secret_key your_script.py

使用案例:

pyinstaller -F myscript.py --icon=icon.ico --add-data 'src;dest' --hidden-import=module.name

cx_Freeze

cx_Freeze是另一个流行的打包工具,它将Python脚本转换为可执行文件。

参数及其作用

  • -c:创建压缩的可执行文件。
  • -o:指定输出目录。
  • -r:包含的额外运行时文件。
  • -s:不包含独立的Python解释器。
  • --include-modules:包括额外的模块。
  • --exclude-modules:排除某些模块。

使用案例:

cxfreeze myscript.py --icon=icon.ico --include-modules=module1,module2 --exclude-modules=module3

py2exe

py2exe是一个用于Windows平台的打包工具。

参数及其作用:

  • --dist-dir:指定生成的可执行文件的目录。
  • --icon:指定图标文件。
  • --includes:包括额外的模块。
  • --excludes:排除某些模块。

使用案例:

python setup.py py2exe --dist-dir=.\dist --icon=icon.ico --includes=module1,module2

Nuitka

Nuitka是一个将Python代码转换为C语言然后编译成可执行文件的工具。

参数及其作用:

  1. -o--output-dir
  • 描述:指定输出目录,用于存储生成的可执行文件和其他相关文件。

  • 示例:nuitka --output-dir=/path/to/output myscript.py

  1. --file-reference-choice
  • 描述:控制用于引用包含在输出文件夹中的文件的策略。

  • 示例:nuitka --file-reference-choice=runtime myscript.py

  1. -s--standalone
  • 描述:创建一个完全独立的可执行文件,包含所有依赖的库。

  • 示例:nuitka --standalone myscript.py

  1. --recurse-none
  • 描述:不递归包含任何模块,除非明确指定。

  • 示例:nuitka --recurse-none myscript.py

  1. --recurse-all
  • 描述:递归包含所有用到的模块。

  • 示例:nuitka --recurse-all myscript.py

  1. --recurse-to
  • 描述:递归包含指定的模块及其依赖。

  • 示例:nuitka --recurse-to=module1,module2 myscript.py

  1. --recurse-not-to
  • 描述:明确不递归包含指定的模块。

  • 示例:nuitka --recurse-not-to=module1,module2 myscript.py

  1. --include-plugin-directory
  • 描述:包含指定的插件目录。

  • 示例:nuitka --include-plugin-directory=/path/to/plugin myscript.py

  1. --include-package
  • 描述:包含指定的包。

  • 示例:nuitka --include-package=package1,package2 myscript.py

  1. --include-module
  • 描述:包含指定的模块。

  • 示例:nuitka --include-module=module1,module2 myscript.py

  1. --nofollow-imports
  • 描述:不遵循import语句。

  • 示例:nuitka --nofollow-imports myscript.py

  1. --plugin-enable
  • 描述:启用指定的插件。

  • 示例:nuitka --plugin-enable=plugin_name myscript.py

  1. --plugin-disable
  • 描述:禁用指定的插件。

  • 示例:nuitka --plugin-disable=plugin_name myscript.py

  1. --windows-icon
  • 描述:为Windows可执行文件指定图标。

  • 示例:nuitka --windows-icon=/path/to/icon.ico myscript.py

  1. --linux-icon
  • 描述:为Linux可执行文件指定图标。

  • 示例:nuitka --linux-icon=/path/to/icon.png myscript.py

  1. --macos-icon
  • 描述:为macOS可执行文件指定图标。

  • 示例:nuitka --macos-icon=/path/to/icon.icns myscript.py

  1. -v--verbose
  • 描述:输出详细信息。

  • 示例:nuitka -v myscript.py

  1. --show-memory
  • 描述:显示内存使用情况。

  • 示例:nuitka --show-memory myscript.py

  1. --show-progress
  • 描述:显示编译进度。

  • 示例:nuitka --show-progress myscript.py

使用案例:

nuitka --standalone --output-dir=.\dist myscript.py --recurse-all
0

评论区