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.
私はあなたの特定のユースケースについては知りませんが、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
あなたはこれでより多くの情報を見つけることができます ガイド トムシェフラーによって書かれました
1人のユーザーが直面している別の問題と同じように直面している問題package 'matplotlib' as absolute import.
この問題、次にnuitakaが下にコメントを付けて、それが下のコメントに役立つかどうかを確認します。
Windowsでは32ビットPythonを使用していて、2GB RAM境界に達していると思います。幸運を祈るには64ビットを使用してください。ちなみに、スケーラビリティの向上に取り組んでいます今のところ、Nuitkaは1000個のモジュールをすべてRAMにロードし、それらをすべてグローバルにコンパイルします。大量のRAMが必要です。