Ошибка 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.
Ответы
Ответ 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 модулей в оперативную память и компилирует их по всему миру. Требуется много оперативной памяти.