web-dev-qa-db-ja.com

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.
15
bakalolo

私はあなたの特定のユースケースについては知りませんが、nuitkaを使用しているときにパッケージエラーで同様の ''が見つかりません。

私はsqlalchemyを使用していて、configparserで同様の問題が発生しました。
デバッグの約1日後、NuitkaがSWIG(動的にロードされた共有オブジェクト)でトリップすることがわかりました。基本的には、一部のプログラム/モジュールは条件付きインポートを使用して互換性を高めようとします。
例:

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

具体的には、configparserライブラリの名前はpython3ではconfigparser、python2ではConfigParserです。
つまり、基本的に起こっていることは、明らかにpython 2を使用しているときに、nuitkaがpython 2のものをインポートしようとしているということです。

私にとっての修正は、sqlalchemyのソースコードを変更し、if elseコンストラクトを次のように変更することでした。

import thatlibrary   

あなたはこれでより多くの情報を見つけることができます ガイド トムシェフラーによって書かれました

5
ChaoticTwist

ヌイタカからの公式回答

1人のユーザーが直面している別の問題と同じように直面している問題package 'matplotlib' as absolute import.この問題、次にnuitakaが下にコメントを付けて、それが下のコメントに役立つかどうかを確認します。

Windowsでは32ビットPythonを使用していて、2GB RAM境界に達していると思います。幸運を祈るには64ビットを使用してください。ちなみに、スケーラビリティの向上に取り組んでいます今のところ、Nuitkaは1000個のモジュールをすべてRAMにロードし、それらをすべてグローバルにコンパイルします。大量のRAMが必要です。

2
Yogesh Rathi