【问题标题】:is compiled python file under debian is compatible with ubuntu是在debian下编译的python文件与ubuntu兼容
【发布时间】:2018-04-14 00:48:38
【问题描述】:

我正在使用 nuitka 编译我的 python 代码。我使用--module 选项将我的代码导入到其他 python 文件中:

nuitka --module --recurse-none file.py
Output: file.so

如果我不需要导入代码而只需要在终端上运行,我将遵循常规编译过程:

nuitka --recurse-none file.py
Output: file.exe

我在 Debian 下编译这些文件,它们在 Debian 下运行没有问题。当我将这些文件移动到 Ubuntu 系统时,有时会收到 Segmentation Fault 错误。是因为 Debian 下编译的 python 代码与 Ubuntu 不兼容,还是我犯了个人错误(比如缺少库等)

【问题讨论】:

  • Ubuntu 是一个 debian linux。但是您提供的有关错误或平台的信息非常少。
  • 我还没有更新nuitka,但您不需要使用--standalone 来使可执行文件移植到几乎相同的机器上吗?

标签: python linux nuitka


【解决方案1】:

正如abarnert 所回答的那样,如果您想让您的可执行文件独立于您设备上的特定 python 安装,您需要使用 --standalone 选项。

您可以在 Nuitka Manual 中查看该信息

【讨论】:

    【解决方案2】:

    动态链接

    来自文档,

    它将 Python 转换为 C 级程序,然后使用“libpython”以与 CPython 相同的方式执行。

    您是否安装了libpython 并指向与您正在编译的版本相同的版本?示例,在拱门上:

    $ whereis libpython
    libpython: /usr/lib/libpython3.so
    

    表明我已安装 libpython 并属于 python 3.x(注意 3 在路径末尾)。

    静态链接。

    我猜另一种方法是按照其他人的建议,即使用--standalone 选项。这应该避免需要libpython

    【讨论】:

      【解决方案3】:

      我有点怀疑你的问题是否正确。 *.exe 通常是 Windows 可执行文件,而 *.so 是 UNIX/Linux 可重新加载模块。在没有深入研究手册的情况下,我注意到在一个示例中您有--module,并且您确实得到了一个 Linux 模块。在另一种情况下,你没有。而你没有。

      【讨论】:

      • "创建的二进制文件有一个“.exe”后缀,您可以随意删除它,是的,它们仍然是 Linux 二进制文件。后缀只是为了确保原始脚本名称和二进制名称不冲突。” nuitka.net/doc/user-manual.html
      • 酷。那么为什么--module 不见了?
      猜你喜欢
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 2016-11-18
      相关资源
      最近更新 更多