【问题标题】:Pyinstaller executable only works with virtual environment activatedPyinstaller 可执行文件仅适用于激活的虚拟环境
【发布时间】: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


【解决方案1】:

这不是您的问题的直接解决方案,但我遇到了同样的问题并通过使用 py2exe 而不是 pyinstaller 解决了它。

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 1970-01-01
    • 2022-10-17
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多