Я - дополнительный новичок. То, что я хочу сделать, создают расширение, которое не требует, чтобы другие библиотеки были установлены. Действительно ли это невозможно, потому что расширение должно связаться против определенной версии libpython во времени выполнения?
Вы не можете создать статически связанный модуль расширения, потому что Python должен загружать его динамически во время выполнения и потому что (как вы рассуждали) модуль необходимо динамически связываться с libpython.
Вы можете скомпилировать свою собственную версию Python со своим расширением, статически связанным с интерпретатором. Обычно это больше проблем, чем того стоит.
Почему вы хотите создать статически связанное расширение? Если у нас будет дополнительная информация о ваших целях, мы сможем помочь вам достичь их другим способом.
Добро пожаловать в StackOverflow. : -)
Я думаю, вы смешиваете разные вещи. Вы не хотите, чтобы расширение было статически связано в интерпретаторе (что возможно, но громоздко, поскольку оно включает в себя перестройку настраиваемого интерпретатора), вы хотите, чтобы ваше расширение не было связано с pythonxx.dll или было статически связано с ним. Это невозможно; например, ваше расширение и интерпретатор python будут иметь свои собственные копии глобальных переменных, что является плохим.
Существует другой подход, который заключается в том, чтобы определить, какие версии Python доступны во время выполнения, и динамически использовать Python / C API, загружая Python DLL через LoadLibrary (Windows) или dlopen (Linux и т. Д.), А затем принимая решение во время выполнения, подписи методов в зависимости от версии и т.д. Очень громоздко. Для примера такого рода манипуляций в Delphi см. PythonForDelphi:
http://www.atug.com/andypatterns/pythonDelphiTalk.htm
Я не знаю ни одного другого проекта, который бы сделал это.