PyPy、Django、PostgreSQLを連携させるにはどうすればよいですか?


90

PyPy、Django、PostgreSQLをうまく連携させるには、どのフォークまたはパッケージの組み合わせを使用すればよいですか?

PyPyとDjangoがうまく連携していることは知っていますが、PyPyとPostgreSQLについてはあまり確信が持てません。Alex Gaynorがpypy-postgresqlと呼ばれるPyPyのフォークを作成したことはわかります。また、一部の人々がpsycopg2-ctypesを使用していることも知っています。

これらのフォークの間に違いはありますか?または、安定した1.9 PyPyを使用し、psycopg2-ctypesを使用する必要がありますか?ctypesオプションを使用すると、パフォーマンスが低下する可能性があります。以下のコメントを参照してください。

また、pyscopg2でPyPyを使用するときに落とし穴を経験した人はいますか?何かが正しく機能しない場合は、CPythonにフォールバックするのは簡単なようですが、ほとんどの場合、プログラマが事前に準備できることを探しています。

周りを見回したところ、psycopg2がPyPyでネイティブに機能しているようには見えません。一部の人にはpsycopg2-ctypesが機能しているようですが、pypy-devについての議論がありました。私はWindowsで作業していますが、残念ながらpsycopg2-ctypesはまだWindowsの準備ができていません。


8
:彼はまた、Postgresの問題について語っDjangoconヨーロッパ2011、からアレックスによる素敵な話がありますblip.tv/djangocon-europe-2011/...
ベルンハルトVallant

3
ところで、PyPyからのcコードの呼び出しは、純粋なpythonモジュールを使用するよりもはるかに遅くなります。そのため、PyPyを介してDjango + psycopg2を実行してもメリットは得られないでしょう。RPythonで psycopg2を書き換えるか、CPythonを使用し、アプリケーションの重要な部分をCythonで最適化できます。
Vladimir Protasov

また、bitbucket.org / alex_gaynor / pypy-postgresql(kind old ...)
jperelli

2
私の周りの何人かの人々はpsycopg2ctを推奨しますが、ジャンゴなし...助けることができます...
Dingo

あなたのOS、ディストリビューション、バージョンは何ですか?
pylover 2012年

回答:


33

psycopg2cffi(2015年更新)

psycopg2cffiはさらに別のpsycopg2互換の代替品であり、PyPyで最高のPostgreSQLパフォーマンスを提供するはずです。これをに追加して、settings.py両方との互換性を維持します。

try:
    import psycopg2
except ImportError:
    # Fall back to psycopg2cffi
    from psycopg2cffi import compat
    compat.register()

psycopg2-ctypes(2012)

psycopg2-ctypesを使用している人もいることも知っています。

これが最も簡単な方法です。両方との互換性を維持するには、次のコードをDjangoに追加しますsettings.py

try:
    import psycopg2
except ImportError:
    # Fall back to psycopg2-ctypes
    from psycopg2ct import compat
    compat.register()

私はこれを数リリース前にテストしました。残念ながら、私の経験では、psycopg2-ctypesはPyPyによって得られる小さなパフォーマンスの向上を打ち消します。しかし、YMMVは、コードが一般的にJITフレンドリーであるかどうか、および実際にPythonコードの実行に費やした時間の割合に依存します。そして、おそらくPyPyはそれ以来改善されたばかりです。

psycopg2-ctypesはまだWindowsに対応していないと思います

私はこれを試していませんが、ctypesはプラットフォームに依存しません。AFAICTあなたはちょうどそれを確認する必要がありますlibpq.dllライブラリがロード可能(PATH環境変数内のディレクトリまたはローカルディレクトリにある)であり、WindowsでもLinuxと同じように機能ます。

pypy-postgresql

Alex Gaynorがpypy-postgresqlと呼ばれるPyPyのフォークを作成したことはわかります。

これは長期的には良い選択ではないと思います。ブランチは1年以上更新されておらず、ブランチを構築する私の試みは失敗しました。とにかく、インタプリタでPostgreSQLドライバをハードコードするのは間違っているようです。

pypy-postgresqlのバイナリも存在しないと思いますので、それを使用したい場合は、PyPyブランチ全体を自分で構築する必要があります。心臓の弱い人には向いていません。数十分で、4 GB以上のメモリを搭載したマシンが必要です。(公式指示:http : //pypy.org/download.html#building-from-source

ビルドするには、最初にソースが必要です。Mercurialがインストールされている場合は、簡単にできますhg clone https://bitbucket.org/alex_gaynor/pypy-postgresql。そうでない場合は、automagicの「tip」zipファイルをダウンロードできます。https//bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zip

コマンドラインを開き、解凍されたディレクトリに移動してから、 pypy/translator/goal

PyPyがインストールされている場合は、ビルドに使用することをお勧めします。

pypy translate.py -Ojit

さもないと:

python translate.py -Ojit

悲しいことに、これが私の知識の終わりです。「BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG」というエラーが表示される


ソースからpypyをコンパイルせずにpypyでpypy-pyscopg2を動作させるために何が必要になるかについて、少し追加できますか?
James R

1
私は答えを更新しました。残念ながら、ビルドはエラーで中止されました。私はそれを最後に構築するために丸一日の午後を費やして失敗したことを覚えています。
intgr

16

追加のリソース:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.