2013-07-27 2 views
0

파이썬 3 확장 모듈을 C로 작성했지만 파이썬에서 가져 오기를 시도 할 수 없습니다.파이썬 3에서 기본 가져 오기 시도 표시

어떤 공유 라이브러리 (Linux의 경우 .so)가로드하려고 시도하고 실패한 이유를 파이썬이 인쇄하도록 할 수있는 방법이 있습니까?

슬프게도 내가 읽은 모든 문서는 간결한 방식으로 기본 가져 오기 절차를 설명하기 때문에 실제로 도움이되지 않습니다. 내가 뭘하려

은 다음과 같습니다 항상 Load shared object를 인쇄

ctypes.CDLL("libmydep1.so") 
ctypes.CDLL("libmydep2.so") 

try: 
    import my_main 
    print("Load python") 
except: 
    ctypes.CDLL("libmylib.so") 
    print("Load shared object") 

.

libmylib.so에는 파이썬 엔트리 포인트가 있지만 파이썬 3 확장으로로드하는 것은 작동하지 않는 것처럼 보입니다. 공유 라이브러리로로드해도 작동하지 않습니다.

편집 :

파이썬은 리눅스 규칙을 준수하지 않습니다. lib 디렉토리에서는 libmylib.so이 아니라 mylib.so으로 이름이 지정됩니다.

my_main.so이라고하면 my_main 만로드됩니다. 그래서 성가신.

답변

0

/proc/<pid>/maps 디렉토리를보십시오.

또는 셸에서 lsof -p <PID> 명령을 사용해보십시오.

출처는 this forum입니다. lsof man page. this answer을 참조하십시오.

+0

이것은 내 .so가 전혀로드되지 않는다는 것을 알기 때문에 유용합니다. 아직도 파이썬이로드하려고 시도하고있는 이유와 왜 그리고 왜 실패했는지를 알 수있는 기본 도구가 부족합니다. – abergmeier