PyPy, Django 및 PostgreSQL이 함께 작동하도록하려면 어떻게해야합니까?
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 용으로 준비되어 있지 않다고 생각합니다.
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 환경 변수 또는 로컬 디렉터리의 디렉터리에 있음) 확인하고 Linux에서와 마찬가지로 Windows에서 작동해야합니다.
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
" 오류가 발생합니다.
몇 가지 추가 리소스 :
- PyPy 호환성 정보 : DB 어댑터
- Python 위키의 PostgreSQL 페이지
- psycopg2cffi 콘스탄틴 Lopuhin의 :
PyPy 2.0 및 최신위한 psycopg2의 cffi 기반 구현
( 블로그 게시물 , GitHub의에 REPO , PyPI 페이지 , pypy-dev에 스레드 )
- 현재 가장 강력한 후보 등이 외모,하지만 난 아직 테스트하지 않았습니다 - psycopg2ct by Michael van Tellingen:
ctypes based implementation of psycopg2 for PyPy 1.6 and newer
(GitHub repo, PyPI page) - pypy-postgresql by Alex Gaynor:
abandoned RPython port of psycopg2 implemented as a fork of PyPy (Bitbucket repo) - pypq:
"Python PostgreSQL DBAPI 2.0 compliant driver using ctypes and libpq.so, works with PyPy"
(discussion, PyPI page) - bpgsql:
"Barebones pure-python PostGreSQL client. Mostly DB-API 2.0 (PEP 249) compliant. Includes an experimental Django 1.0 backend"
(discussion, web page, Google Code page) - pg8000:
"a DB-API 2.0 compatible Pure-Python interface to the PostgreSQL database engine [...] does not rely on any external libraries (such as a compiled python module, or PostgreSQL’s libpq library)"
(web page, GitHub repo, PyPI page)
'code' 카테고리의 다른 글
Firefox에서 도메인 간 웹 보안 비활성화 (0) | 2020.09.06 |
---|---|
세로 헤더가있는 HTML 테이블을 작성하는 가장 일반적인 방법은 무엇입니까? (0) | 2020.09.06 |
JavaScript 코드를 실행하는 어색한 방법 (0) | 2020.09.06 |
자동으로 모든 함수에 console.log 추가 (0) | 2020.09.06 |
파일이 있는지 확인하지만 콘솔에 404 오류가 표시되지 않도록합니다. (0) | 2020.09.06 |