2016-06-08 60 views
10

我正尝试使用nuitka工具将我的python程序转换为ubuntu上的可执行文件。如果程序没有任何导入语句,但在我导入某个程序的程序中使用它时会中断,它可以正常工作。Nuitka错误在绝对导入中找不到''包''

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. 
+0

我个人在Mac OS X上有这个问题,通过pip全新安装。构建也非常缓慢 –

+0

也许尝试设置选项 - recurse目录? – Hector

+0

您使用的是virtualenv还是导入模块不在PYTHONPATH上的任何导入机制? –

回答

4

我不知道你的具体使用情况,但我也面对类似使用nuitka时无法找到''包错误。

我正在使用sqlalchemy,并且与configparser有类似的问题。
经过大约一天的调试,我发现Nuitka与SWIG(动态加载的共享对象)一起旅行。 这意味着什么,一些程序/模块试图通过使用条件导入来提高兼容性。
对于如:

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

特别是configparser库命名为python3 configparserConfigParser在python2。
那么基本的情况是,nuitka试图当你清楚正在使用python 2.

对我进口巨蟒-3东西修复是修改的SQLAlchemy的源代码,并改变if else构造来:

import thatlibrary 

你可以找到在此Guide 汤姆Sheffler

+0

我没有使用条件导入并收到此错误。我现在正在考虑在这个问题上给予奖励。 –

0

Official answer from Nuitaka.

书面的详细信息0

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

我想你可能在Windows上使用32位的Python,并命中2GB的RAM边界。使用64位来获得更好的运气。顺便提一句,我正在努力提高下一个版本的可伸缩性,这应该不会发生。现在,Nuitka将所有1000个模块加载到RAM中,并将它们全部编译。需要大量的RAM。