web-dev-qa-db-ja.com

pyximportとは何ですか?どのように使用すればよいですか?

数学モデルのより高速なコードを生成するためにcythonを使用しています。コードのコンパイルに苦労していますが、.batを使用してなんとかしてコンパイルできました。

setlocal EnableDelayedExpansion

CALL "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /x64 /release
set DISTUTILS_USE_SDK=1

C:\Python27\python.exe C:\gcsilve\trunk\myproject\myproject\cythonsetup.py build_ext --inplace

PAUSE

それは大丈夫です...

私の質問はpyximportに関するものです。 pyximport.install()を使用する他の誰かが書いた古いコードがあります。私はすでに自分でコードをコンパイルしているので、それが何をするのか、なぜそれを使用する必要があるのか​​理解できませんでした。それで、誰かがpyximportが何をするのかを非常に単純な方法で(ダミーのために)説明してくれますか?

追加情報:私はcythonを使用するproject1を持っています。私はproject1を参照するproject2を持っています。

23
guilhermecgs

pyximportはCythonの一部であり、importの代わりに使用されます。

モジュールに追加のCライブラリや特別なビルドセットアップが必要ない場合は、pyximportモジュールを使用して、setup.pyファイルを作成しなくても、インポート時に.pyxファイルを直接ロードできます。次のように使用できます。

>>> import pyximport; pyximport.install()
>>> import helloworld
Hello World

Cythonのドキュメントから直接

18
Adam Barthelson

pyximportを使用すると、_.pyx_モジュールを自動的に再コンパイルして再ロードできます。

_setup.py_が生成したものを削除します。そうしないと、その拡張モジュールをロードする可能性があります。 pyximportは_setup.py_を使用しません。

_hello.pyx_関数を持つ_mean2_を想定しましょう。

IPythonを起動します。

In [1]: import pyximport In [2]: pyximport.install(reload_support=True) In [3]: from importlib import reload In [4]: import hello In [5]: hello.mean2(2,3)

結果:

_Out [5]: 2.5_

そのウィンドウを終了し、エディターに移動して_hello.pyx_を変更します。

次に、IPythonに戻り、次のように入力します。

In [6]: reload(hello);import hello;hello.mean2(2,3)

再コンパイルについて通知するテキストが表示されます。その後、新しい結果:

_Out[6]: 'Mean of 2 and 3 is 2.5'_

3
Roland Puntaier