Примечание: компиляция расширений для версий Python, отличных от официальных выпусков, не поддерживается командой Python и должна поддерживаться продуктом - в данном случае Plex.Таким образом, если предположить, что Plex не предоставил способ сделать это, все ниже - хаки и обходные пути.
Кроме того, если разработчик библиотеки не выполняет сборки, вы пытаетесь покрыть их, что означает, что выв основном на своем «уровне» и должны знать свой код так же хорошо, как и они.Добро пожаловать в программное обеспечение с открытым исходным кодом:)
Наконец, это относится только к устаревшему Python 2. Если кто-то читает это на Python 3.5 или более поздней версии, просто установите последнюю версию Visual Studio и используйте последнюю версиюкомпилятор - вся строка 14.x совместима и будет отлично работать с последними версиями Python.
Предполагая, что вы внимательно следите за тем, как расширение взаимодействует с C Runtime, часто безопасно компилировать ваширасширение против «неправильной» C-версии.Здесь следует обратить внимание:
- выделение памяти, которая будет освобождена Python
- освобождение памяти, выделенной Python
- передача / получение файловых дескрипторов или
FILE*
указатели на / из Python - установка любых глобальных настроек, таких как кодировка или локаль
- запись в стандартные потоки
Если все они изолированы, то выу вас просто останется две среды выполнения C в памяти, и они не будут пытаться взаимодействовать.
Теперь, если по какой-то причине это невозможно, вы можете попробовать скомпилировать расширение, используяпозже набор инструментов.Самый простой способ сделать это:
- получить исходный код (я предполагаю, что
setup.py
сборка через колесо) - открыть VS 2013 Developer Command Command
- run
set DISTUTILS_USE_SDK=1
(это обойдет обнаружение MSVC) - run
set MSSdk=1
(также необходимо для обхода обнаружения на устаревшем Python 2) - run
python setup.py bdist_wheel
(может потребоваться установкаwheel
сначала в Python)
Теперь вы можете взять файл колеса и установить его, как обычно, например, путем извлечения / копирования файлов или передачи полного имени файла в pip
.
В целом, очень велика вероятность, что простое создание расширения не удастся.В этом случае вам придется изменить исходный код, чтобы он работал - многие имена устарели и были удалены в трех версиях MSVC между VC 9.0 и VC 12.0, и поэтому вы не увидите предупреждений об устаревании ни для одного из них.
Если разработчик библиотеки уже заставил свою библиотеку работать с Python 3, многие исправления должны быть там, но могут не обнаруживаться (поскольку Python 3 либо использовал VC 10.0, который не нуждался в исправлениях, либоVC 14.x, который может быть обнаружен как _MSC_VER >= 1900
и не обнаружит VC 12.0).Они могут быть благодарны, если вы внесете какие-либо исправления, которые вы делаете, чтобы помочь следующему человеку, но многие разработчики библиотек отказываются от поддержки версий Python до 3.5 и сейчас, и поэтому они могут быть не заинтересованы в поддержке устаревшей поддержки.