Подтвердить что ты не робот

Ошибка Nuitka Невозможно найти "в пакете" как абсолютный импорт

Я пытаюсь использовать инструмент nuitka, чтобы превратить мою программу python в исполняемый файл на ubuntu. Он отлично работает, если программа не имеет операторов импорта, но ломается, когда я использую ее в программе, которая импортирует что-то, например.

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.
4b9b3361

Ответ 1

Я не знаю о вашем конкретном случае использования, но также сталкивался с подобным. Не могу найти "в ошибках пакета при использовании nuitka".

Я использовал sqlalchemy и имел аналогичную проблему с configparser.
Примерно через день отладки я узнал, что Nuitka отправляется с SWIG (Dynamicically Loaded shared objects). В основном это означает, что некоторые программы/модули пытаются повысить совместимость с помощью условного импорта.
Например,

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

в частности, библиотека configparser имеет имя configparser в python3 и configparser в python2.
Итак, что в основном происходит, так это то, что nuitka пытается импортировать вещи python 3, когда вы явно используете python 2.

Для меня исправление заключалось в том, чтобы изменить исходный код sqlalchemy и изменить конструкцию if else на:

import thatlibrary   

Дополнительную информацию можно найти в этом Guide  написанный Томом Шеффлером

Ответ 2

Официальный ответ от Nuitaka.

Какую проблему вы столкнулись с такой же проблемой, как и другая проблема, с которой один пользователь сталкивается с проблемой package 'matplotlib' as absolute import., тогда там, где nuitaka дает комментарии ниже, проверьте, полезно ли это для комментариев ниже.

Я думаю, что вы можете использовать 32-битный Python для Windows и попадать в границу RAM 2GB. Используйте 64 бит для лучшей удачи. Кстати, я работаю над улучшением масштабируемости для следующих выпусков, которые должны сделать это не так. Пока Nuitka загружает все 1000 модулей в оперативную память и компилирует их по всему миру. Требуется много оперативной памяти.