2013-05-07 3 views
0

저는 Cython을 사용하여 Linux에서 자체 제작 된 파이썬 확장을 컴파일하는 데 사용됩니다. 리눅스에서는 distutils를 사용하여 "myext.so"를 생성하고, 그 다음 간단히 내 PYTHONPATH에 추가하고 import myext 파이썬 호출을 사용할 수 있습니다.일단 [Windows에서] 컴파일 된 cython 확장을 사용하면 .pyd를 사용하는 방법은?

이제 Windows 7 (Cython 0.18 사용)에서 작동 시키려고합니다. distutils를 성공적으로 실행하여 myext.pyd 파일을 얻었습니다. 하지만 그것은 "012"("myext.pyd"에 경로를 추가하는 것만으로는 윈도우 아래에서 충분하지 않은 것 같습니다 (http://docs.python.org/2/faq/windows.html#is-a-pyd-file-the-same-as-a-dll). "myext.py"는 어떤 식으로해야합니까? 즉, 파이썬 (2.7) 설치에서 내 확장 기능을 사용할 수있는 절차는 무엇입니까?

참고 : PYTHONPATH에 "myext.pyd"를 포함하는 디렉토리를 추가 한 후, 나는 아직도 얻을 :

python BdmLsim4.py -i model.xml 
Traceback (most recent call last): 
    File "BdmLsim4.py", line 6, in <module> 
    import myext 
ImportError: DLL load failed: module not found. 

많은 감사합니다.

+0

''ImportError' 바로 전에'sys.path'는 어떻게 생겼습니까? AFAIK 디렉토리를'PYTHONPATH'에 넣는 것은 당신이해야하는 모든 일이므로, 디렉토리를 올바르게 추가하지 않았을 수도 있습니다. – Bakuriu

+0

Sys.path = [..., 'D : \\ 02_DEV \\ EVOLAB \\ EVOLAB-2013-05-02 \\ ECLIPSE-WS_ELP \\ evolab-cython \\ src \\ Spatial', 'D : \ \ 02_DEV \\ EVOLAB \\ EVOLAB-2013-05-02 \\ ECLIPSE-WS_ELP \\ evolab-cython \\ setup ','C : \ Windows \\ system32 \\ python27.zip ','C : \\ Python27 \\ DLLs ', ...] 여기서'D : \\ 02_DEV \\ EVOLAB \\ EVOLAB-2013-05-02 \\ ECLIPSE-WS_ELP \\ evolab-cython \\ setup '은 .pyd. 그리고 필요한 "PyMODINIT_FUNC initmyext (void);/* proto * /"명령을 포함하는 Cython에서 생성 된 "myext.cpp"를 확인했습니다. 경로가 괜찮은 것 같습니다. 내 .pyd 파일이 잘 컴파일되지 않았을 수 있습니다. 어떻게 생각해 ? –

+0

Eclipse를 사용하고 있습니까? 이클립스 대신 명령 프롬프트에서 프로그램을 실행하려고 했습니까? – Bakuriu

답변

1

그것은 분명히 당신이 링크 된 문서로 작성 :

foo.pyd에 대한 검색 경로가 PYTHONPATH, 윈도우 foo.dll를 검색하는 데 사용하는 경로로 동일하지 참고 있다. 또한 foo.pyd 은 프로그램을 실행하는 데 필요하지 않지만 프로그램을 dll과 연결하면 dll이 필요합니다. 물론 foo.pyd는 import foo라고하고 싶다면 이 필요합니다. DLL에서 __declspec (dllexport)로 소스 코드에서 연결이 으로 선언되었습니다. .pyd에서 연결은 사용 가능한 기능 목록에 정의 된 입니다.

그래서 당신도 파이썬의 설치 디렉토리 (site-packages) 내부에 .pyd 파일을 배치해야하거나 환경 변수 PYTHONPATH을 수정하고 .pyd이 배치되어있는 디렉토리를 추가 할 수 있습니다.

그러나 다른 대안은 파일을 사용하여 PYTHONPATH을 확장하는 것입니다.

관련 문제