web-dev-qa-db-ja.com

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

PyPy、DjangoとPostgreSQLが一緒にNiceをプレイするために使用するフォークまたはパッケージの組み合わせはどれですか?

私はPyPyとDjango一緒にナイスプレイしますが、PyPyとPostgreSQLについてはあまり確信がありません。アレックスゲイナーが pypy-postgresql 。ま​​た、一部の人々が psycopg2-ctypes を使用していることも知っています。

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

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

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

90
James R

psycopg2cffi(2015年更新)

psycopg2cffi はpsycopg2互換のもう1つの代替品であり、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環境変数内のディレクトリまたはローカルディレクトリにある)であり、Linuxと同様にWindowsでも機能することを確認する必要があります。

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」というエラーが表示されます

33
intgr

追加のリソース:

  • PyPy互換性情報: DBアダプター
  • PostgreSQLページ Python wiki
  • Konstantin Lopuhinによるpsycopg2cffi
    PyPy 2.0以降用のpsycopg2のcffiベースの実装
    ブログ投稿GitHub repoPyPI pagepypy-dev thread
    –これは現在最強の候補者のようですが、まだテストしていません
  • マイケル・ヴァン・テリンゲンによるpsycopg2ct
    ctypesベースのPyPy 1.6以降用のpsycopg2の実装
    GitHub repoPyPI page
  • pypy-postgresqlアレックスゲイナー:
    PyPyのフォークとして実装されたpsycopg2の放棄されたRPythonポート( Bitbucket repo
  • pypq
    「ctypesおよびlibpq.soを使用するPython PostgreSQL DBAPI 2.0準拠のドライバーは、PyPyで動作します」
    ディスカッションPyPIページ
  • bpgsql
    「Barebones pure-python PostGreSQLクライアント。ほとんどがDB-API 2.0(PEP 249)に準拠しています。実験的なDjango 1.0バックエンドが含まれています。」
    ディスカッションウェブページGoogleコードページ
  • pg8000
    "PostgreSQLデータベースエンジンへのDB-API 2.0互換のPure-Pythonインターフェイス[...]は、外部ライブラリに依存していません(コンパイルされたpythonモジュール、またはPostgreSQLのlibpqライブラリ)」
    ウェブページGitHubリポジトリPyPIページ
16
akaihola