आपको एक साथ काम करने के लिए PyPy, Django और PostgreSQL कैसे मिलते हैं?


90

PyPy, Django और PostgreSQL को एक साथ खेलने के लिए किस कांटे या पैकेज के संयोजन का उपयोग करना चाहिए?

मुझे पता है कि PyPy और Django एक साथ अच्छा खेलते हैं, लेकिन मैं PyPy और PostgreSQL के बारे में कम निश्चित हूं। मैं देख रहा हूँ कि एलेक्स गेन्नोर ने पाइपी-पोस्टग्रेसल नामक पाइपी का एक कांटा बनाया है । मुझे यह भी पता है कि कुछ लोग psycopg2-ctypes का उपयोग कर रहे हैं ।

क्या इन कांटों में अंतर है? या हमें स्थिर 1.9 PyPy का उपयोग करना चाहिए और psycopg2-ctypes का उपयोग करना चाहिए? Ctypes विकल्पों का उपयोग प्रदर्शन को नुकसान पहुंचा सकता है, नीचे टिप्पणी देखें।

इसके अलावा, किसी ने pyscopg2 के साथ PyPy का उपयोग करने के साथ किसी भी नुकसान का अनुभव किया है? यह काफी आसान लगता है अगर कुछ सही काम नहीं कर रहा है तो CPython पर वापस गिर सकता है, लेकिन ज्यादातर मैं उन चीजों की तलाश कर रहा हूं जिन्हें तैयार करने के लिए एक प्रोग्रामर समय से पहले कर सकता है।

मैंने चारों ओर देखा, ऐसा नहीं लगता है कि psycopg2 मूल रूप से PyPy के साथ काम करता है। हालाँकि, psycopg2-ctypes कुछ लोगों के लिए काम करता प्रतीत होता है, वहाँ pypy-dev पर चर्चा हुई । मैं विंडोज पर काम करता हूं, और मुझे नहीं लगता कि psycopg2-ctypes विंडोज के लिए अभी तक, दुख की बात है।


8
एलेक्स द्वारा Djangocon यूरोप 2011 से एक अच्छी बात है, जहां वह पोस्टग्रेज के मुद्दों के बारे में भी बात करता है: blip.tv/djangocon-europe-2011/…
बर्नहार्ड

3
BTW, PyPy से c कोड को कॉल करना अभी भी शुद्ध अजगर मॉड्यूल का उपयोग करने की तुलना में बहुत धीमा है। तो आप शायद PyPy के माध्यम से Django + psycopg2 चलाने से कोई लाभ नहीं लेंगे। आप RPYthon में psycopg2 को फिर से लिख सकते हैं या CPython का उपयोग कर सकते हैं और अपने आवेदन के महत्वपूर्ण भागों को Cython के साथ अनुकूलित कर सकते हैं ।
व्लादिमीर प्रोटैसोव

इसके अलावा: bitbucket.org/alex_gaynor/pypy-postgresql (पुराने की तरह ...)
जॅपेरेली

2
मेरे आसपास के कुछ लोग psycopg2ct की सिफारिश कर रहे हैं , लेकिन django के बिना ... मई मदद कर सकता है ...
डिंगो

आपका ओएस, वितरण, संस्करण क्या है?
पाइलोवर

जवाबों:


33

psycopg2cffi (2015 की अपडेटेड)

psycopg2cffi अभी तक एक और psycopg2- संगत रिप्लेसमेंट है और इसे PPy के साथ सबसे अच्छा 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 के अनुकूल कैसे है और आप वास्तव में पायथन कोड को चलाने में किस समय खर्च करते हैं। और शायद तब से PyPy में सुधार हुआ है।

और मुझे नहीं लगता कि psycopg2-ctypes अभी तक विंडोज के लिए तैयार है

मैंने यह कोशिश नहीं की है, लेकिन ctypes प्लेटफ़ॉर्म-स्वतंत्र है। AFAICT आपको बस यह सुनिश्चित करना है कि libpq.dllपुस्तकालय लोड करने योग्य है (आपके PATH पर्यावरण चर या स्थानीय निर्देशिका में एक निर्देशिका में स्थित है) और यह लिनक्स की तरह विंडोज पर काम करना चाहिए।

PyPy-PostgreSQL

मैं देख रहा हूँ कि एलेक्स गेन्नोर ने पाइपी-पोस्टग्रेसल नामक पाइपी का एक कांटा बनाया है।

मुझे नहीं लगता कि लंबी अवधि में यह एक अच्छा विकल्प है। शाखा को एक वर्ष से अधिक समय से अद्यतन नहीं किया गया है और इसे बनाने के मेरे प्रयास विफल रहे हैं। और वैसे भी दुभाषिया में PostgreSQL ड्राइवर को हार्ड-कोड करना गलत लगता है।

मेरा मानना ​​है कि पीपे-पोस्टग्रैसक्ल के कोई बायनेरिज़ नहीं हैं, इसलिए यदि आप इसका उपयोग करना चाहते हैं, तो आपको पूरी पपी शाखा का निर्माण करना होगा। दिल के बेहोश होने के लिए नहीं: इसमें दस मिनट लगते हैं और कम से कम 4 जीबी मेमोरी वाली मशीन होती है। (आधिकारिक निर्देश: http://pypy.org/download.html#building-from-source )

बनाने के लिए, आपको सबसे पहले स्रोत की आवश्यकता है। यदि आपके पास मर्क्यूरियल स्थापित है, तो आप बस कर सकते हैं hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql। यदि नहीं, तो आप स्वचालित "टिप" ज़िप फ़ाइल डाउनलोड कर सकते हैं: 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"


क्या आप थोड़ा जोड़ सकते हैं, बशर्ते, आपको पता हो, कि पीपे से काम लेने में पीपे के साथ काम करने की क्या ज़रूरत हो सकती है?
जेम्स आर।

1
मैंने विवरण के साथ उत्तर को अपडेट किया कि मुझे कितना मिला। दुर्भाग्य से निर्माण एक त्रुटि के साथ निरस्त हो गया। मुझे याद है कि एक पूरी दोपहर बिताने की कोशिश कर रहा था कि आखिरी बार इसे बनाने की कोशिश करूं, और असफल भी हुआ।
इंट्रगेट करें

16

कुछ अतिरिक्त संसाधन:

  • PyPy संगतता जानकारी: DB एडेप्टर
  • पायथन विकी पर PostgreSQL पेज
  • psycopg2cffi Konstantin Lopuhin द्वारा:
    PyPy 2.0 और नवीन के लिए psycopg2 की cffi आधारित कार्यान्वयन
    ( ब्लॉग पोस्ट , GitHub रेपो , PyPI पेज , PyPy-देव धागा )
    - सबसे मजबूत उम्मीदवार वर्तमान में इस तरह दिखता है, लेकिन मैं अभी तक यह परीक्षण नहीं किया
  • psycopg2ct माइकल वान Tellingen द्वारा:
    PyPy 1.6 और नए के लिए psycopg2 की ctypes आधारित कार्यान्वयन
    ( GitHub रेपो , PyPI पेज )
  • एलेक्स गेन्नोर द्वारा pypy-postgresql :
    PyPy ( बिटबकेट रेपो ) के कांटे के रूप में कार्यान्वित psycopg2 के आरपीथॉन पोर्ट को छोड़ दिया गया
  • pypq :
    "Python PostgreSQL DBAPI 2.0 अनुरूप ड्राइवर ctypes और libpq.so का उपयोग करते हुए, PyPy के साथ काम करता है"
    ( चर्चा , PyPI पृष्ठ )
  • bpgsql :
    " बेयरबॉन्स प्योर-पाइथन पोस्टग्रेक्यूएल क्लाइंट। ज्यादातर DB-API 2.0 (PEP 249) कंप्लेंट। इसमें एक प्रयोगात्मक Django 1.0 बैकएंड शामिल है"
    ( चर्चा , वेब पेज , Google कोड पेज )
  • pg8000 :
    "PostgreSQL डेटाबेस इंजन के लिए एक DB-API 2.0 संगत प्योर-पायथन इंटरफ़ेस [...] किसी भी बाहरी पुस्तकालयों (जैसे संकलित अजगर मॉड्यूल, या PostgreSQL के libbq लाइब्रेरी) पर भरोसा नहीं करता है"
    ( वेब पेज , GitHub repo) , PyPI पेज )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.