Pyinstaller 的 .exe 文件立即关闭



我有一个工作的python包,它是一个CLI工具,我想把它转换成一个单独的.exe文件上传到其他包管理器,所以我使用了Pyinstaller。在使用以下命令构建.exe文件之后:

pyinstaller -c --log-level=DEBUG main.py 2> build.txt --onefile --exclude-module=pytest --add-data "src;src"

我双击了。exe文件,但它立即关闭,但在那一瞬间,我看到了预期的输出,这应该是命令行界面,所以。exe确实工作,但不是完全。

main.py

from src.Categorize_CLI.__main__ import main
if __name__ == "__main__":
main()

。spec文件

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[('src', 'src')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['pytest'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)

我把main.exe文件拖到一个打开的命令提示符,然后按enter键,它工作了,我得到了一个错误:

RuntimeError: 'package' is not installed. Try passing 'package_name' instead.
[15592] Failed to execute script 'main' due to unhandled exception!

听起来好像脚本跑到文件末尾了,快到你看不出来。您可以通过打开终端(windows中的cmd/powershell)并像运行其他CLI工具一样运行程序来确认这一点。

cd pathtoexe
./exe -arguments

因为你是从一个已经打开的终端启动的,所以当脚本结束时它不会关闭。

如果这是问题,你可以通过添加

来解决它
input("Continue...") # wait for user

更新

正如@BokiX所说,pyinstaller会导致杀毒软件误报。试着换一个,例如:nuikta:

pip install Nuikta
python -m nuikta main.py

安装python程序与传统程序

传统的程序安装程序通常是一个带有一些附加功能的精美zip文件,用于为其所在的相关系统设置程序(例如更改注册表,下载附加文件)。

python程序只是一个"冻结"的python脚本。In状态,以便它可以在没有python或其依赖项的系统上独立运行。一旦你有了exe,它就可以运行了,而不需要"安装"。

使用控制台程序控制台程序是一种可以在终端上执行的程序。在现代使用中,这些通常是为了让它们可以由脚本运行,或者有人发现输入比使用GUI更快。

在cmd中运行代码,而不是通过单击exe

pyinstaller exe "通常"当1 -代码中有错误时关闭,2 -代码执行完成,显示输出

后关闭同样正如BokiX所说,pyinstaller exe经常被错误地标记为恶意,所以也许可以在你的反病毒程序中添加一个例外。

最新更新