15

我正在尝试使用 nuitka 工具将我的 python 程序转换为 ubuntu 上的可执行文件。如果程序没有任何导入语句但是当我在导入某些东西的程序上使用它时中断它工作正常,例如

测试.py

import numpy

print "hello, world."

在命令行输入这个

nuitka --recurse-all --python-version=2.7 test.py

并给我这些错误

Nuitka:WARNING:/usr/lib/python2.7/dist-packages/numpy/numarray/functions.py:45: Cannot find 'copyreg' in package 'numpy.numarray' as absolute import.
Nuitka:WARNING:/usr/lib/python2.7/dist-packages/numpy/distutils/npy_pkg_config.py:11: Cannot find 'configparser' in package 'numpy.distutils' as absolute import.
Nuitka:WARNING:/usr/lib/python2.7/dist-packages/numpy/distutils/system_info.py:1765: Cannot find 'Numeric' in package 'numpy.distutils' as absolute import.
Nuitka:WARNING:/usr/lib/python2.7/dist-packages/numpy/distutils/system_info.py:1770: Cannot find 'numarray' in package 'numpy.distutils' as absolute import.
Nuitka:WARNING:/usr/lib/python2.7/dist-packages/numpy/f2py/diagnose.py:48: Cannot find 'numpy_distutils' in package 'numpy.f2py' as absolute import.
Nuitka:WARNING:/usr/lib/python2.7/dist-packages/numpy/f2py/diagnose.py:87: Cannot find 'numpy_distutils.command.build_flib' in package 'numpy.f2py' as absolute import.
4

2 回答 2

6

我不知道您的特定用例,但在使用 nuitka 时,我也遇到了类似的无法在包中找到“”错误。

我正在使用 sqlalchemy 并且遇到了类似的问题configparser
经过大约一天的调试后,我发现 Nuitka 与 SWIG(动态加载的共享对象)发生故障。这基本上意味着,一些程序/模块试图通过使用条件导入来增加兼容性。
例如:

If python_version==3.5:
    import thislibrary
else:
    import thatlibrary

具体来说,该库在 python3 和python2configparser中命名。 所以基本上正在发生的是,当你清楚地使用 python 2 时,nuitka 正在尝试导入 python 3 的东西。 configparserConfigParser

对我来说,解决方法是修改 sqlalchemy 的源代码并将if else构造更改为:

import thatlibrary   

您可以在Tom Sheffler 编写的本指南中找到更多信息

于 2016-07-11T10:57:48.200 回答
2

Nuitaka的官方回答。

你面临的问题就像另一个用户面临package 'matplotlib' as absolute import.这个问题的问题一样,然后有 nuitaka 在下面给出评论检查它是否对下面的评论有用。

我认为您可能在 Windows 上使用 32 位 Python 并达到 2GB RAM 边界。使用 64 位以获得更好的运气。顺便说一句,我正在为下一个版本进行可扩展性改进,这应该不会发生。现在 Nuitka 将所有 1000 个模块加载到 RAM 中并在全局范围内编译它们。需要大量内存。

于 2016-08-08T07:09:24.617 回答