Почему расширения Python являются общими библиотеками? Можно ли сделать статически-связанную библиотеку? - PullRequest
6 голосов
/ 19 мая 2010

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

Ответы [ 2 ]

5 голосов
/ 19 мая 2010

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

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

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

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

3 голосов
/ 20 мая 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...