安装打包工具
pip install pyinstaller
进行打包
使用命令 pyinstaller -F app.py
进行打包,其输出如下所示
505731 INFO: Copying icon to EXE
505735 INFO: Copying 0 resources to EXE
505736 INFO: Embedding manifest in EXE
505784 INFO: Appending PKG archive to EXE
505838 INFO: Fixing EXE headers
519361 INFO: Building EXE from EXE-00.toc completed successfully.
520246 INFO: checking COLLECT
520246 INFO: Building COLLECT because COLLECT-00.toc is non existent
520246 INFO: Building COLLECT COLLECT-00.toc
542317 INFO: Building COLLECT COLLECT-00.toc completed successfully.
运行exe
[Errno 2] No such file or directory: gradio_client\types.json
这是由于pyinstaller 没有准确的识别出用于代码中gradio_client与gradio库的依赖项,需要将打包命令修改下命令即可,也就是补充上 --collect-data=gradio_client --collect-data=gradio ,完整命令如下:
pyinstaller -F app.py --collect-data=gradio_client --collect-data=gradio
运行还是报错缺少其他文件,反复发现缺少好多依赖....
查看当前所有依赖
pip freeze
继续打包
pyinstaller --onefile --collect-all aiofiles --collect-all annotated_types --collect-all anyio --collect-all certifi --collect-all charset_normalizer --collect-all click --collect-all colorama --collect-all dateutil --collect-all fastapi --collect-all ffmpy --collect-all filelock --collect-all fsspec --collect-all gradio --collect-all gradio_client --collect-all groovy --collect-all h11 --collect-all httpcore --collect-all httpx --collect-all huggingface_hub --collect-all idna --collect-all jinja2 --collect-all lxml --collect-all markdown_it --collect-all markupsafe --collect-all mdurl --collect-all multipart --collect-all numpy --collect-all opencc --collect-all orjson --collect-all packaging --collect-all pandas --collect-all pillow --collect-all pip --collect-all pydantic --collect-all pydantic_core --collect-all pydub --collect-all pygments --collect-all python_multipart --collect-all pytz --collect-all requests --collect-all rich --collect-all ruff --collect-all safehttpx --collect-all semantic_version --collect-all setuptools --collect-all shellingham --collect-all sniffio --collect-all starlette --collect-all tomlkit --collect-all tqdm --collect-all typer --collect-all tzdata --collect-all urllib3 --collect-all uvicorn --collect-all websockets --collect-all wheel app.py
再次执行时出现以下报错
FileNotFoundError: [Errno 2] No such file or directory: gradio\blocks_events.pyc
这是由于gradio库中的代码都是pyi文件,而pyinstaller 在打包时默认库中的都是pyc文件,故而需要修改spec文件,指定对gradio库下的代码进行编译。
生成spec文件
pyi-makespec --onefile --collect-all aiofiles --collect-all annotated_types --collect-all anyio --collect-all certifi --collect-all charset_normalizer --collect-all click --collect-all colorama --collect-all dateutil --collect-all fastapi --collect-all ffmpy --collect-all filelock --collect-all fsspec --collect-all gradio --collect-all gradio_client --collect-all groovy --collect-all h11 --collect-all httpcore --collect-all httpx --collect-all huggingface_hub --collect-all idna --collect-all jinja2 --collect-all lxml --collect-all markdown_it --collect-all markupsafe --collect-all mdurl --collect-all multipart --collect-all numpy --collect-all opencc --collect-all orjson --collect-all packaging --collect-all pandas --collect-all pillow --collect-all pip --collect-all pydantic --collect-all pydantic_core --collect-all pydub --collect-all pygments --collect-all python_multipart --collect-all pytz --collect-all requests --collect-all rich --collect-all ruff --collect-all safehttpx --collect-all semantic_version --collect-all setuptools --collect-all shellingham --collect-all sniffio --collect-all starlette --collect-all tomlkit --collect-all tqdm --collect-all typer --collect-all tzdata --collect-all urllib3 --collect-all uvicorn --collect-all websockets --collect-all wheel app.py
隐藏控制台
添加以下参数 --noconsole
pyi-makespec --onefile --noconsole --collect-all aiofiles --collect-all annotated_types --collect-all anyio --collect-all certifi --collect-all charset_normalizer --collect-all click --collect-all colorama --collect-all dateutil --collect-all fastapi --collect-all ffmpy --collect-all filelock --collect-all fsspec --collect-all gradio --collect-all gradio_client --collect-all groovy --collect-all h11 --collect-all httpcore --collect-all httpx --collect-all huggingface_hub --collect-all idna --collect-all jinja2 --collect-all lxml --collect-all markdown_it --collect-all markupsafe --collect-all mdurl --collect-all multipart --collect-all numpy --collect-all opencc --collect-all orjson --collect-all packaging --collect-all pandas --collect-all pillow --collect-all pip --collect-all pydantic --collect-all pydantic_core --collect-all pydub --collect-all pygments --collect-all python_multipart --collect-all pytz --collect-all requests --collect-all rich --collect-all ruff --collect-all safehttpx --collect-all semantic_version --collect-all setuptools --collect-all shellingham --collect-all sniffio --collect-all starlette --collect-all tomlkit --collect-all tqdm --collect-all typer --collect-all tzdata --collect-all urllib3 --collect-all uvicorn --collect-all websockets --collect-all wheel app.py
修改spec文件
添加gradio的编译
a = Analysis(
['app.spec'],
pathex=[],
binaries=binaries,
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
module_collection_mode={ 'gradio': 'py',},
optimize=0,
)
修改后,删除掉目录下的build文件夹,再次执行 pyinstaller app.spec
即可
成功运行
* Running on local URL: http://10.211.55.5:7860
To create a public link, set `share=True` in `launch()`.
本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2025/03/11 03:34