티스토리 뷰

Python에서 (또는 Cython에서) 외부 라이브러리를 사용할 때 (주로 Python wrapper 모듈을 통해 사용), 외부(external or third party) 동적 라이브러리(dynamic library, DLL) 또는 공유 라이브러리 (shared library, SO)가 들어있는 디렉토리가 dynamic linker가 참조하는 환경변수에 포함돼 있어야 한다.


운영체제에 따라 프로그램 실행 과정에서 동적 라이브러리를 찾는 방법이 다르니, '적절한' 환경변수에 해당 라이브러리가 들어있는 경로를 추가해 주면 된다.


예를 들어, Windows에서는 "PATH", Linux 배포판에서는 "LD_LIBRARY_PATH", OSX에서는 "DYLD_LIBRARY_PATH"에 동적 라이브러리가 들어있는 경로를 추가해 주면 된다.


외부 라이브러리가 들어있는 경로를, PYTHONPATH 환경변수에 추가하거나 sys.path.append()로 Python 확장모듈 경로모음에 추가해 주는 것은 효과가 없다. Python(여기에서는 CPython) 프로그램이 실행되는 중에 밑단에서 돌아가고 있는 동적 라이브러리 코드를 호출하는 경우, 운영체제가 해당 동적 라이브러리의 위치를 파악할 수 있어야 하기 때문이다.


외부 라이브러리를 이용하는 C/C++ 프로그램이 실행되는 원리와 동일하다고 보면 된다.


참고:

http://osr507doc.sco.com/en/tools/ccs_linkedit_dynamic_dirsearch.html

http://superuser.com/questions/282450/where-do-i-set-dyld-library-path-on-mac-os-x-and-is-it-a-good-idea







댓글