Почему расширения Python являются совместно использованными библиотеками? Действительно ли возможно сделать статически связанную библиотеку?

Я - дополнительный новичок. То, что я хочу сделать, создают расширение, которое не требует, чтобы другие библиотеки были установлены. Действительно ли это невозможно, потому что расширение должно связаться против определенной версии libpython во времени выполнения?

6
задан amoffat 19 May 2010 в 13:01
поделиться

2 ответа

Вы не можете создать статически связанный модуль расширения, потому что Python должен загружать его динамически во время выполнения и потому что (как вы рассуждали) модуль необходимо динамически связываться с libpython.

Вы можете скомпилировать свою собственную версию Python со своим расширением, статически связанным с интерпретатором. Обычно это больше проблем, чем того стоит.

Почему вы хотите создать статически связанное расширение? Если у нас будет дополнительная информация о ваших целях, мы сможем помочь вам достичь их другим способом.

Добро пожаловать в StackOverflow. : -)

5
ответ дан 16 December 2019 в 21:36
поделиться

Я думаю, вы смешиваете разные вещи. Вы не хотите, чтобы расширение было статически связано в интерпретаторе (что возможно, но громоздко, поскольку оно включает в себя перестройку настраиваемого интерпретатора), вы хотите, чтобы ваше расширение не было связано с pythonxx.dll или было статически связано с ним. Это невозможно; например, ваше расширение и интерпретатор python будут иметь свои собственные копии глобальных переменных, что является плохим.

Существует другой подход, который заключается в том, чтобы определить, какие версии Python доступны во время выполнения, и динамически использовать Python / C API, загружая Python DLL через LoadLibrary (Windows) или dlopen (Linux и т. Д.), А затем принимая решение во время выполнения, подписи методов в зависимости от версии и т.д. Очень громоздко. Для примера такого рода манипуляций в Delphi см. PythonForDelphi:

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

Я не знаю ни одного другого проекта, который бы сделал это.

3
ответ дан 16 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: