2013-03-05 9 views
2

저는 PyPy에서 녹색입니다. Python 코드를 해석하기 위해 PyPy1.9를 사용합니다.PyPy에서 .so 모듈을 어떻게 가져올 수 있습니까?

CPython 인터프리터는 C/C++ 코드에서 컴파일 된 .so 파일로 패키지화 된 모듈을 가져올 수 있습니다.

하지만 PyPy1.9 인터프리터는 .so 파일에서 모듈을 찾을 수 없다고 말하면서 코드가 약간 느리고 성능을 최적화하고 싶습니다.

+0

시도한 내용, C 버전을 원하는 모듈, 현재 사용중인 플랫폼 등을 알려 주시면 도움이됩니다.일반적으로 PyPy는 CPython 모듈을 사용할 수 있지만 Python의 "혼합 모드"모듈 인'ctypes' 나'CFTY'를 사용하는 것이 더 빠릅니다 (CPython에서는 보통'ctypes'가 약간 _slower_입니다). CPyExt를 통해 아직 작동하지 않는 모듈이 있습니다 (가장 유명한 'numpy'와 그것에 의존하는 모든 것). – abarnert

+0

@abarnert, 'Scientific.IO.NetCDF import NetCDFFile from Dataset'을 사용하여 NetCDF 파일을 읽었습니다. 우분투 12.04에 속합니다. – xunzhang

+0

내가 검색했을 때 처음 등장한 사이트는 http://gfesuite.noaa.gov/developer/netCDFPythonInterface.html이었는데, Numpy는 numpy의 옛 조상이다. 일이 너를 위해 잘 될 것이라고 보장하지 않는다. 그러나 노력할 가치가 있습니다. – abarnert

답변

-1

PyPy의 경우 CFFI과 같은 것을 사용해야합니다.이 코드는 Foreign Function Interface을 사용하여 라이브러리 코드에 액세스합니다 (자세한 내용은 Loading Libraries 섹션 참조).

편집 : 위의 답변에 의해 수정되었습니다. 도서관에 접근 할 수있는 대안을 갖고 단순히 정당화 된 downvotes를 받아들이면이 대답을 남겨 둘 것입니다.

+1

사실이 아닙니다. 여러분은 그렇게 할 수 있고, 또한'ctypes' (PyPy와 CPython과 함께 작동합니다)를 사용할 수 있습니다.하지만 (대부분의) CPython 확장 모듈을 사용할 수도 있습니다. – abarnert

2

첫 번째로, CPyExt은 PyPy에서 사용되었습니다. 정확한 버전은 잊어 버렸지 만 지금은 약 1.9 년 전이었습니다.

기본적으로 CPython과 마찬가지로 모듈을 빌드하고 설치하면됩니다.

CPython이 아닌 PyPy를 사용하여 설치해야합니다. 시스템의 각 Python 설치가 별도의 site-packages 디렉토리를 가지고 있다는 사실 외에도 CPyExt는 CPython 헤더 및 라이브러리가 아닌 PyPy 헤더 및 libs에 대해 모듈을 빌드해야합니다.

수동으로 설치하는 경우 python setup.py install 대신 pypy setup.py install을 입력하면됩니다. pip 또는 easy_install을 사용하는 경우 해당 도구의 PyPy 버전은 일반적으로 pip_pypyeasy_install_pypy과 같은 이름이 지정됩니다. 당신이하지 installed pip이있는 경우, 설치 (물론 sudo와 아마,.)

pip_pypy install foo 

: 당신이 pip를 설치 한 경우

그래서,뿐만 쉬워야한다 Pyyy는 CPython과 같은 방식이다. 예를 들어 :

curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py 
pypy get-pip.py 

당신이 바이너리 설치 프로그램을 사용하는 경우는, 다음 분명히 당신은 PyPy-1.9의 바이너리 설치를 얻을 수 있습니다. 그리고, 없으면 바이너리 설치 프로그램을 사용할 수 없습니다. (그냥 경우처럼 32 비트 Windows에서 CPython의 2.7 foo를 설치하고 싶어하고 단지 2.6 패키지 또는 64 비트 패키지를했다.)


마지막 주 :하지 않는 일부 패키지가 있습니다 아직 CPyExt로 작업합니다. 가장 중요한 것은 numpy과 그것에 의존하는 모든 것, 그리고 Fortran 코드를 바인딩해야하는 모든 것입니다. 이 패키지 중 일부는 CPython을 확인하거나 PyPy가 아닌지 확인합니다. 초기 오류를 알려줍니다. 다른 사람들은 구축하고 실패 할 수도 있습니다. 어떤 경우에는 성공적으로 빌드되지만 작동하지 않을 수 있습니다 (예 : GIL로 멋진 결과를 얻으려는 시도 때문에 1 개 이상의 스레드가있는 프로그램에서 실패 할 수 있음). 그러나 가장 쉬운 방법은 시도해보고하는 것입니다.

+0

바이너리 패키지를 사용합니다. – xunzhang

+1

@xunzhang : 그렇다면 PyPy 용 바이너리 패키지를 얻어야한다. 그리고, 없으면 바이너리 패키지를 사용할 수 없습니다. 소스에서 설치해야합니다. – abarnert