【问题标题】:Binaries I created with pyinstaller are incompatible with linux我用 pyinstaller 创建的二进制文件与 linux 不兼容
【发布时间】:2013-03-24 01:29:17
【问题描述】:

我使用带有选项--onefile 的最新版本pyinstaller 来创建我的python 脚本的一个独立文件。在我的 Mac 上,如果我在终端(bash shell)中打开文件,它就可以正常工作,但在 Linux bash 中,我收到以下错误

bash: ./myprog: cannot execute binary file

我在这里缺少什么吗?

【问题讨论】:

    标签: python linux binary pyinstaller


    【解决方案1】:

    pyinstaller 创建一个可执行文件,该可执行文件将在运行它的机器上运行。因此,如果您在 Windows 上运行 pyinstaller,它会为 Windows 创建一个可执行文件。 Mac、Linux 等也一样,所以我会尝试在你的 Linux 机器上运行 pyinstaller 来为该环境生成一个工作可执行文件。 Mac 可执行文件不是 Linux 可执行文件。

    这是因为(据我了解)底层 Python 包括特定于平台的某些事物的实现。例如,os 模块有一堆有条件的、依赖于平台的导入,它们将被捆绑到可执行文件中。由于它只能访问pyinstaller 正在运行的平台上可用的任何二进制文件,因此它无法为其他平台生成版本。

    【讨论】:

    • 啊,好吧,我明白了。所以我必须在我的 Mac、Linux 和 Windows 机器上使用 pyinstaller 来生成 3 个单独的程序。 Windows 7 和 Windows 8 怎么样,你知道在 windows 7 上通过 pyinstaller 生成的程序是否可以在 Windows 8 上运行吗?
    • @bluewoodtree 我倾向于认为他们可能会,但没有什么可以替代测试!
    • 问题不在于进口。参见例如os.path。我在linux上,但我可以导入ntpath,这是windows实现操作系统os.path。问题是在处理特定系统调用时(例如,os.fork 在 Windows 中不存在)、必须构建的 .c 模块(因此可执行文件将包含运行 pyinstaller 的体系结构的构建)和事实上,不同的平台有不同的可执行格式。 Mac OS X 可执行文件不是 linux 可执行文件。 OP 错误显示:程序甚至没有启动!
    【解决方案2】:

    Linux 检查可执行文件的幻数, Linux 可执行文件的幻数以“DLE elf”开头

    执行“od -c YUPUR_FILE”并查看结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 2011-01-02
      • 2013-12-09
      • 1970-01-01
      • 2014-02-10
      • 2020-04-22
      相关资源
      最近更新 更多