Nuitka错误无法在绝对导入中找到''in package''

时间:2016-06-08 21:52:33

标签: python nuitka

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

test.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.

2 个答案:

答案 0 :(得分:5)

我不知道您的特定用例,但我也遇到过类似的问题,在使用nuitka时无法找到''包错误。

我使用的是sqlalchemy,与configparser有类似的问题 经过大约一天的调试后,我发现Nuitka带着SWIG(动态加载的共享对象)绊倒了。 它的意思基本上是,一些程序/模块试图通过使用条件导入来增加兼容性 例如:

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

具体来说,configparser库在python3中名为configparser,在python2中名称为ConfigParser
所以基本上正在发生的是,当你明显使用python 2时,nuitka正试图导入python 3的东西。

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

import thatlibrary   

您可以在此Guide中找到更多信息  汤姆谢弗勒写的

答案 1 :(得分:2)

Official answer from Nuitaka.

您遇到的问题与一个用户面临package 'matplotlib' as absolute import.此问题的另一个问题相同,然后nuitaka在下面给出评论,检查它是否对以下评论有用。

  

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