1. ホーム
  2. python

[解決済み] PyPy、Django、PostgreSQLを連携させるには?

2023-03-19 16:46:48

質問

PyPy、Django、PostgreSQLを一緒に使うには、どのフォーク、またはパッケージの組み合わせを使うべきですか?

PyPyとDjangoがうまく動作することは知っていますが、PyPyとPostgreSQLについてはあまり確信がありません。Alex GaynorがPyPyのフォークを作ったのは知っています。 pypy-postgresql . また、何人かの人が psycopg2-ctypes .

これらのフォークに違いはあるのでしょうか?それとも安定版1.9のPyPyを使って、psycopg2-ctypesを使うべきですか?ctypesオプションを使うとパフォーマンスが落ちる可能性があります、以下のコメントを参照してください。

また、pyscopg2でPyPyを使用する際に何か落とし穴を経験した人はいますか? 何かが正しく動作しない場合にCPythonにフォールバックすることは十分に簡単だと思いますが、主にプログラマが準備するために前もってできることを探しています。

psycopg2 は PyPy でネイティブに動作するようには見えません。しかし、psycopg2-ctypes は何人かの人のために動いているようで、次のような議論がありました。 pypy-dev . 私はWindowsで仕事をしていますが、悲しいかな、psycopg2-ctypesはまだWindowsの準備ができていないと思います。

どのように解決するのですか?

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のブランチ全体を自分でビルドする必要があります。気の弱い人には向かないでしょう: 数十分かかり、少なくとも4GBのメモリを持つマシンが必要です。(公式の手順書です。 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 "。