2010-05-19 4 views

답변

5

정적으로 링크 된 확장 모듈을 만들 수 없습니다. 런타임에 파이썬을 동적으로로드해야하기 때문이며 모듈이 libpython과 동적으로 링크해야하기 때문입니다.

인터프리터에 정적으로 링크 된 확장을 사용하여 Python의 사용자 정의 버전을 컴파일 할 수 있습니다. 그것은 보통 가치보다 더 많은 문제입니다.

왜 정적으로 연결된 확장 프로그램을 만드시겠습니까? 우리가 귀하의 목표에 대한 더 많은 정보를 가지고 있다면, 우리는 당신이 다른 방식으로 목표를 달성하도록 도울 수 있습니다.

Welcome to StackOverflow. :-)

+0

대니얼 감사합니다. 응답 : 환영합니다. 설치시 컴파일하지 않아도 주요 플랫폼에 앱 (C 확장자 있음)을 배포하는 가장 좋은 방법을 찾아 냈습니다. – amoffat

+0

@Andrew : 아! 왜 그렇게 말하지 않았 니? :) 배포 패키지 (http://pypi.python.org/pypi/distribute)를 사용하여 알 ('setup.py bdist_egg')을 만든다. Windows의 경우 설치 프로그램을 빌드하십시오 ('setup.py bdist_wininst'). 유니 코드 비 호환성 문제에주의하십시오 (http://bugs.python.org/issue8654 참조). –

+1

또는 확장 프로그램이 일반적으로이 플랫폼에서 이미 발견 된 것을 포함하는 경우 확장 모듈 대신 ctypes를 사용하십시오. – fraca7

3

나는 당신이 물건을 섞고 있다고 생각합니다. 익스텐션이 인터프리터에서 정적으로 링크되기를 원하지는 않는다. (사용자 인터프리터를 다시 빌드하는 것이 가능하기 때문에 성가신 일이지만 가능하다.) 파이썬 xxx.dll에 연결되지 않도록하거나, 정적으로 링크를 연결하지 않기를 바란다. 이건 불가능 해; 확장자와 파이썬 인터프리터는 예를 들어 전역 변수의 각각 자신의 복사본을 가지게됩니다.

또 다른 접근법은 런타임에 사용 가능한 Python 버전을 확인하고 Python DLL을 LoadLibrary (Windows) 또는 dlopen (Linux/etc)을 통해로드하여 Python/C API를 동적으로 사용하고 런타임에서 결정하는 것입니다 버전에 따라 메서드 서명이 달라집니다. 매우 복잡합니다. 델파이 조작 이런 종류의 예를 들어, PythonForDelphi를 참조하십시오

http://www.atug.com/andypatterns/pythonDelphiTalk.htm

나는 그렇게 할 것이다 다른 프로젝트를 잘 모르는 것 같아요.

+0

감사합니다. 동적 로딩 방법을 살펴 보겠습니다. – amoffat

관련 문제