【发布时间】:2021-08-18 17:41:43
【问题描述】:
我在一个虚拟便携环境中创建了一个 Python 可执行文件,由 Anaconda 和包 conda-pack 创建,在终端上使用以下命令:
(venv) > pyinstaller --onefile --paths=src/ --exclude-module PyQt5 program.py
当我在激活环境的情况下启动构建的可执行文件时,程序可以运行。 没有激活环境,什么都不会发生。启动它后,可执行文件停止(没有任何警告或错误)。选项 --onefile 和 --exclude-module 不影响结果。
虚拟环境的模块应该包含在可执行文件中,然后不需要它来激活环境。怎么办?
谢谢。
【问题讨论】:
-
首先你可以在很多地方使用
print()来查看哪部分代码被执行了,哪部分会出现问题。它被称为"print debuging"。Python不是为了构建可执行文件而创建的,像pyinstaller这样的程序可能无法找到所有需要的 Python 模块和 C/C++ 库。 -
是的,我也猜这是一个动态库问题。即使它静态链接直接依赖项,Conda 也非常注重构建具有大量动态链接并经常使用相对路径的库。出于 Conda 的目的,这对于在不同环境中模块化重用库非常有用,但可能难以解决。不确定您的操作系统,但尝试使用
ldd(Linux) 或otool -L(Mac) 查看可执行文件可能正在搜索的库。
标签: python anaconda virtualenv pyinstaller executable