#author("2024-07-17T08:40:56+08:00","default:Admin","Admin")
#author("2024-07-17T10:07:21+08:00","default:Admin","Admin")
[[Python]]

&color(red){※This article is based on Python 3.7.3};

#contents

* 概要 [#dd2f32bb]

** 为什么要将 Python 程序打包为 exe 可执行文件 [#s65e8ed7]

众所周知,Python 程序的运行必须要有 Python 的环境,但是程序编出来是用的,如果是给别人用,而他/她的电脑上又没有 Python 程序运行的环境怎么办呢?总不能让他/她去安装一个吧?这时我们就要将 Python 程序打包为 exe 文件。这样,在 Windows 平台下,就可以直接运行该程序,不论有没有 Python 环境。

** 为什么 Python 程序不能直接运行呢 [#i13850a7]

Python 是解释性语言,它与 C 或者 C++ 等编译型语言不同,C 或者 C++ 都是要编译再运行的,(编译产生的最终文件就是 exe 文件),Python 本质上只是对一段文本进行解释,类似于浏览器解析 html 文档,是不会产生任何 exe 文件的。

* 安装 Pyinstaller [#zb12a9ac]

这个用 pip 模块直接下载就行,直接就下载在本次需要打包的 Python 环境下(base 环境)

 pip install Pyinstaller

* 使用 [#h40033b0]

命令格式如下

 Pyinstaller -option1 -option2 -... 要打包的文件

|参数选项|描述|h
|-F, -onefile|只生成一个单个文件(只有一个 exe 文件)|
|-D, -onedir|打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,这样代码易于维护|
|-K, –tk|在部署时包含 TCL/TK|
|-i -icon=<FILE.ICO>|将 file.ico 添加为可执行文件的资源(只对 Windows 系统有效),改变程序的图标|

这里简单地举几个例子,让大家明白这个参数怎么写。

# 这一般是用来打包界面化的程序的,如用tkinter、Pyqt5等制作的程序。
# -w 的意思就是exe运行的时候不弹出那个命令行(黑窗口)
#codeprettify{{
Pyinstaller -F -w somefile.py# 这一般用来添加exe的图标
Pyinstaller -F -i someicon.ico somefile.py
}}

* Troubleshooting [#v0d64200]

** 打包后报错提示有些文件找不到 [#w315d3c3]
#codeprettify{{
 Traceback (most recent call last):
  File "fastwhisper3.py", line 25, in <module>
    segments, info = model.transcribe(wavfile, beam_size=5, language="zh", vad_filter=True, vad_parameters=dict(min_silence_duration_ms=1000))
  File "faster_whisper\transcribe.py", line 333, in transcribe
  File "faster_whisper\vad.py", line 74, in get_speech_timestamps
  File "faster_whisper\vad.py", line 229, in get_vad_model
  File "faster_whisper\vad.py", line 246, in __init__
  File "onnxruntime\capi\onnxruntime_inference_collection.py", line 419, in __init__
  File "onnxruntime\capi\onnxruntime_inference_collection.py", line 472, in _create_inference_session
onnxruntime.capi.onnxruntime_pybind11_state.NoSuchFile: [ONNXRuntimeError] : 3 : NO_SUCHFILE : Load model from C:\Users\ADMINI~1\AppData\Local\Temp\_MEI46842\faster_whisper\assets\silero_vad.onnx failed:Load model C:\Users\ADMINI~1\AppData\Local\Temp\_MEI46842\faster_whisper\assets\silero_vad.onnx failed. File doesn't exist
[4424] Failed to execute script 'fastwhisper3' due to unhandled exception!
}}

使用 --hidden-import 参数也提示找不到

 >pyinstaller --hidden-import WhisperModel fasterwhisper.py
 # 找不到下面的
 12304 ERROR: Hidden import 'WhisperModel' not found

这里的import不要使用代码中 import 后面的模块名,而是应该使用 上面报错里面的 fast_whisper 这个。


* 其他的打包工具 [#cbe59c2a]

** py2exe [#z7957e0a]

py2exe可以将Python代码打包成Windows可执行文件。

使用py2exe打包Python代码也很简单,只需要在命令行中输入以下命令:

 python setup.py py2exe

这将生成一个Windows可执行文件。


** py2app [#e7369322]

py2app可以将Python代码打包成MacOS可执行文件。

使用py2app打包Python代码也很简单,只需要在命令行中输入以下命令:

 python setup.py py2app

这将生成一个MacOS可执行文件。

** cx_Freeze [#s57f5ba2]

cx_Freeze可以将Python代码打包成独立的可执行文件。

使用cx_Freeze打包Python代码也很简单,只需要在命令行中输入以下命令:

 cxfreeze xxx.py --target-dir distflord

这将生成一个可执行文件,可以在Windows、Linux和MacOS上运行。


#hr();
コメント:
#comment_kcaptcha

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS