저는 연장자입니다. 내가하고 싶은 것은 다른 라이브러리를 설치할 필요가없는 확장 기능을 만드는 것입니다. 확장 기능은 런타임에 libpython의 특정 버전과 연결해야하기 때문에 불가능합니까?왜 파이썬 확장 기능 공유 라이브러리입니까? 정적 링크 라이브러리를 만들 수 있습니까?
답변
정적으로 링크 된 확장 모듈을 만들 수 없습니다. 런타임에 파이썬을 동적으로로드해야하기 때문이며 모듈이 libpython과 동적으로 링크해야하기 때문입니다.
인터프리터에 정적으로 링크 된 확장을 사용하여 Python의 사용자 정의 버전을 컴파일 할 수 있습니다. 그것은 보통 가치보다 더 많은 문제입니다.
왜 정적으로 연결된 확장 프로그램을 만드시겠습니까? 우리가 귀하의 목표에 대한 더 많은 정보를 가지고 있다면, 우리는 당신이 다른 방식으로 목표를 달성하도록 도울 수 있습니다.
Welcome to StackOverflow. :-)
나는 당신이 물건을 섞고 있다고 생각합니다. 익스텐션이 인터프리터에서 정적으로 링크되기를 원하지는 않는다. (사용자 인터프리터를 다시 빌드하는 것이 가능하기 때문에 성가신 일이지만 가능하다.) 파이썬 xxx.dll에 연결되지 않도록하거나, 정적으로 링크를 연결하지 않기를 바란다. 이건 불가능 해; 확장자와 파이썬 인터프리터는 예를 들어 전역 변수의 각각 자신의 복사본을 가지게됩니다.
또 다른 접근법은 런타임에 사용 가능한 Python 버전을 확인하고 Python DLL을 LoadLibrary (Windows) 또는 dlopen (Linux/etc)을 통해로드하여 Python/C API를 동적으로 사용하고 런타임에서 결정하는 것입니다 버전에 따라 메서드 서명이 달라집니다. 매우 복잡합니다. 델파이 조작 이런 종류의 예를 들어, PythonForDelphi를 참조하십시오
http://www.atug.com/andypatterns/pythonDelphiTalk.htm
나는 그렇게 할 것이다 다른 프로젝트를 잘 모르는 것 같아요.
감사합니다. 동적 로딩 방법을 살펴 보겠습니다. – amoffat
- 1. 공유 라이브러리와 정적 라이브러리가 모두있는 공유 라이브러리를 만들 수 있습니까
- 2. 정적 라이브러리가있는 공유 라이브러리를 만들 수 없습니다.
- 3. 링크 오류 공유 라이브러리를 만들 때
- 4. 공유 라이브러리를 정적 라이브러리로 변환
- 5. DLL 프로젝트의 정적 링크 기능
- 6. gcc는 링크 할 때 공유 객체에 정적 라이브러리를 선호합니까?
- 7. 공유 라이브러리를 정적 라이브러리에 링크 : 응용 프로그램을 링크하는 경우와 다른 방식으로 정적 라이브러리를 컴파일해야합니까?
- 8. CMake : 정적 라이브러리를 사용하는 공유 라이브러리
- 9. 공유 문서 라이브러리를 사용하면 어떻게 '영구 링크'를 만들 수 있습니까?
- 10. Haxe는 라이브러리를 만들 수 있습니까?
- 11. 정적 라이브러리를 공유 라이브러리로 변환 하시겠습니까?
- 12. 2.0 Framework로 확장 메서드를 만들 수 있습니까?
- 13. 언제 라이브러리를 만들 가치가 있습니까?
- 14. php에서 함수 라이브러리를 어떻게 응집력있게 만들 수 있습니까?
- 15. 공유/정적 종속성 속성을 가질 수 있습니까?
- 16. GNU libtool을 사용하여 정적 및 공유 라이브러리를 모두 만드시겠습니까?
- 17. 파이썬 기능
- 18. NSArrayController 및 공유, 정적, 코어 데이터 기반 라이브러리를 참조하십시오
- 19. 정적 라이브러리를 사용할 수 없습니다.
- 20. Emacs 버퍼를 정적/고정으로 만들 수 있습니까?
- 21. ios 개발에서 컴파일 된 정적 라이브러리를 디버그 할 수 있습니까
- 22. MATLAB에서 공유 라이브러리를 만드는 경험이 있습니까?
- 23. Iphone 링크 정적 라이브러리
- 24. 부스트 - "정적"대 "공유"라이브러리
- 25. 파이썬 os.forkpty 왜 작동하지 않을 수 있습니까?
- 26. 왜 정적 함수에서만 정적 멤버에 액세스 할 수 있습니까?
- 27. Oracle 원시 컴파일 링 공유 라이브러리를 재사용 할 수 있습니까?
- 28. 정적 클래스의 확장 메서드를 만들 수없는 이유는 무엇입니까?
- 29. Python 확장 기능 멀티 쓰레딩 설명
- 30. GCC/Linux : .so에 정적 라이브러리를 추가 하시겠습니까?
대니얼 감사합니다. 응답 : 환영합니다. 설치시 컴파일하지 않아도 주요 플랫폼에 앱 (C 확장자 있음)을 배포하는 가장 좋은 방법을 찾아 냈습니다. – amoffat
@Andrew : 아! 왜 그렇게 말하지 않았 니? :) 배포 패키지 (http://pypi.python.org/pypi/distribute)를 사용하여 알 ('setup.py bdist_egg')을 만든다. Windows의 경우 설치 프로그램을 빌드하십시오 ('setup.py bdist_wininst'). 유니 코드 비 호환성 문제에주의하십시오 (http://bugs.python.org/issue8654 참조). –
또는 확장 프로그램이 일반적으로이 플랫폼에서 이미 발견 된 것을 포함하는 경우 확장 모듈 대신 ctypes를 사용하십시오. – fraca7