7

我正在使用 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 不兼容还是我犯了个人错误(比如缺少库等)

4

3 回答 3

2

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

您可以在 Nuitka手册中查看该信息

于 2018-04-24T13:33:51.753 回答
1

动态链接

从文档中,

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

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

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

显示我已libpython安装并属于 python 3.x(3路径末尾的通知)。

静态链接。

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

于 2018-04-24T17:59:45.207 回答
0

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

于 2018-04-14T01:05:46.647 回答