2

私は PyPy に緑色で、Python コードを解釈するために PyPy1.9 を使用しています。

ご存じのとおり、CPython インタープリターは、C/C++ コードからコンパイルされた .so ファイルにパッケージ化されたモジュールをインポートできます。

しかし、PyPy1.9 インタープリターは、.so ファイルでモジュールを見つけることができないと教えてくれました。私のコードは少し遅く、パフォーマンスを最適化したいのです。助けて!!

4

2 に答える 2

2

まず、CPyExtが PyPy に組み込まれたのは… 正確なバージョンは忘れましたが、1.9 よりもかなり前の数年前です。

基本的に、CPython の場合と同様に、モジュールをビルドしてインストールするだけです。

CPython ではなく、必ず PyPy でインストールしてください。システム上の各 Python インストールには個別のsite-packagesディレクトリがあるという事実に加えて、CPyExt では、CPython ではなく、PyPy ヘッダーとライブラリに対してモジュールをビルドする必要があります。

手動でインストールする場合は、pypy setup.py install代わりにpython setup.py install. pipまたはを使用している場合、これらのツールの PyPy バージョンには通常、 andeasy_installのような名前が付けられます。pip_pypyeasy_install_pypy

したがって、 をインストールpipした場合は、次のように簡単に実行できます。

pip_pypy install foo

(sudoもちろん、 を使用することもできます。)

をインストールpipしていない場合は、CPython の場合と同じ方法で PyPy にインストールします。例えば:

curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
pypy get-pip.py

バイナリ インストーラを使用している場合は、明らかに PyPy-1.9 のバイナリ インストーラを入手する必要があります。また、バイナリ インストーラがない場合は使用できません。(32 ビット Windows に CPython 2.7 をインストールする場合と同様にfoo、2.6 パッケージまたは 64 ビット パッケージしかありません。)


最後の注意: CPyExt でまだ動作しないパッケージがいくつかあります。最も注目すべきは、numpyそれに依存するすべてのもの、および Fortran コードをバインドする必要があるその他のものです。これらのパッケージのいくつかは、CPython をチェック (または非 PyPy をチェックしますか?) し、早期エラーを出します。他の人は構築しようとして失敗するかもしれません。他のものはビルドに成功しても、場合によっては動作しないことがあります (たとえば、GIL に凝ろうとして、2 つ以上のスレッドを持つプログラムで失敗するものもあります)。しかし、最も簡単なのは、実際に試してみることです。

于 2013-03-05T02:55:18.413 に答える
-1

PyPy の場合、外部関数インターフェイスを使用してライブラリ コードにアクセスするCFFIのようなものを利用する必要があります (詳細については、ライブラリのロードに関するセクションを参照してください)。

編集:上記の回答で修正されました。ただし、ライブラリにアクセスするための代替手段を用意し、正当な反対票を受け入れるために、この回答はここに残します。

于 2013-03-05T02:53:57.703 に答える