2011-04-14 4 views
4

* .pyd를 Python으로로드하려고하는데 "가져 오기 오류 : DLL로드 실패 : 지정된 절차를 찾을 수 없습니다. " 오류.* .pyd 파일을로드 할 수 없지만 DependancyWalker가 정상적으로 실행되고 ProcMon에서로드 된 것으로 표시됩니다.

이미 다음 수행 한 :

1) 조사한 * 종속성 워커으로 .pyd. GPSVC.DLL과 IESHIMS.DLL은 누락 된 것으로 나타 났지만 지연은로드되었지만 IEFRAME.DLL도 내보내기 누락으로 나타 났지만 지연로드되었습니다. 이것들은 사용되지 않고 어쨌든 지연 부하이기 때문에 그것이 문제가되어서는 안된다는 것을 이해합니다.

2.) 파이썬 명령 창에서 foo.pyd에 "import foo"를 ProcMon 시청과 함께 보냈습니까? ProcMon은 결과 "SUCCESS"로 "foo.pyd"에 "LoadImage"이벤트를 표시합니다.

이것은 * .pyd 파일이 올바르게로드 된 것 같습니다.

그래서 나는 무엇을 놓치고 있습니다. 내 창문 진단은 모두 잘되고 있지만, 파이썬은 나에게 물건을로드 할 수 없다고 말하고있다. (일반적으로 누락 된 dll이나 기호로 인해).

아이디어가 있으십니까?

감사합니다.

+0

업데이트 : 문제의 * .pyd에 LoadLibrary()를 수행하기위한 작은 프로그램을 만들었습니다. 출력 결과 * .pyd가 제대로로드되었으며 종속성 (* .pyd 없이는 프로그램에서 필요하지 않음)도 올바르게 선택되어로드되었습니다. – Transformer2

답변

4

사용중인 동일한 버전의 Python 용 .pyd 파일이 있습니까? 잘못된 Python 버전에 대한 .pyd 파일을로드하면 해당 오류 메시지가 생성 될 수 있습니다.

종속성 워커는 링크 된 pythonNN.dll을 표시 할 수 있습니다.

+0

같은 버전 인 것 같습니다. 모든 문서는 그것이 내가 사용하고있는 파이썬 2.6에서 작동한다고 말합니다. 그리고 Dependency Walker는 Python26.dll에 링크 된 것을 보여줍니다. – Transformer2

+0

다른 버전의 python26.dll. 그것이 문제였습니다. – Transformer2

1

파일이 foo.pyd 인 경우 import foo을 성공 시키려면 initfoo이라는 외부 액세스 가능 함수가 있어야합니다. Dependency Walker는이 기능을 표시합니다 (일반적으로 유일한 기능). initfoofoo 모듈을 초기화하기 위해 Python에서 호출해야합니다.

참고 :이 문제라면 내가 좀 더 명시 적 오류 메시지가 예상 :

>>> import fubar 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: dynamic module does not define init function (initfubar) 
>>> 

당신은 당신이 "A *으로 .pyd 파일을로드 할"것을 말한다. 그것은 단지 import foo을 묘사하는 이상한 방법입니까? 아니면 다른 것입니까?

pyd를 만들었습니까? 그렇지 않다면 누가 했습니까? 당신이 그들에게 물어 봤어? 이 pyd는 다른 사람들이로드/가져 오기를 시도 할 수 있도록 웹에서 사용할 수 있습니까?

창문 진단 (따라, procmon 등) DLL (또는 PYD)로드 벌금을 보여주는되었다 : 여기에 좋아

+0

또 다른 가능성은 누락 된 "지연로드"DLL 중 하나가 실제로 init 함수에 필요하다는 것입니다. – ncoghlan

+0

입력 해 주셔서 감사합니다. * .pyd는 initfoo를 적절하게 정의합니다. * .pyd의 유일한 기능입니다 (설명대로). 오류 메시지가 더 명확하지 않아, 파이썬이로드 오류가 발생한 위치를 알 수없는 Windows dll 로딩 시스템에서 오류가 발생했음을 나타냅니다. – Transformer2

1

는 대답이다.

파이썬이 로딩이 잘 안되는 것으로 나타났습니다.

Windows 도구가 내 C : \ Window \ SysWOW64 폴더에 숨어있는 다른 Python26.dll을 가리키는 것을 발견했습니다.

이 두 번째 Python26.dll (SysWOW64에 있음)에는 기본 python26.dll (C : \ Python26에있는 Windows 파이썬 설치 프로그램에 의해 설치됨)에없는 기호가 있습니다.

이 기호 "_PyByteArray_empty_string"은 분명히 * .pyd 파일에 필요합니다.

Windows 진단을 통해로드 할 때 SysWOW64 dll이 발견되었고 * .pyd가 제대로로드되었습니다. 파이썬에서 로딩 할 때, C : \ Python26 \에있는 dll이 발견되었고, 기호가 누락되어로드에 실패했습니다.

그래서 문제가 분명합니다. 문제는 다음과 같습니다. 두 가지 버전의 Python26.dll이 주위에 떠 다니는 이유는 무엇입니까? 하나는 _PyByteArray_empty_string이고 다른 하나는없는 것입니다.

저는 파이썬 2.6.6을 사용하고 있습니다. 아마도이 기호는 2.6.6에서 제거되었지만 일부 구형 2.6.x 릴리스에는있을 수 있습니까?

관련 문제