Как собрать DParser for Python с помощью Visual C++ 2005?
August 28th, 2007
Существует два способа собрать DParser for Python под Windows:
- Легкий – воспользоваться GCC из MinGW и немного пошаманить;
- Интересный – попытаться сделать тоже самое с помощью Visual C++ 2005.
Естественно, что я выбрал второй вариант.
(На самом деле причина довольно прозаична – не хотелось собирать один проект двумя разными компиляторами).
Исходные данные:
- Python v2.5.1. Я пробовал x86 и x64 варианты. Версия для Itanium должна работать точно так же;
- DParser v1.15;
- Boost.Build v2. Любая другая система сборки проектов тоже подойдёт;
- Visual C++ 2005.
Последовательность действий:
- Распаковываем DParser куда-нибудь, скажем “C:\temp\D”.
- Применяем патч, который в добавляет недостающие (из-за отсутствующих заголовков) объявления и правит кое-где код.
pushd C:\\temp patch -Np1 -d D < dparser-1.15.diffКроме правки кода, патч добавляет в несколько новых файлов:
- “Jamfile.v2″ и “Jamroot” – скрипты для сборки DParser с помошью Boost.Build v2;
- “python\setup_win32.py” – Windows версия скрипта для сборки DParser for Python;
- “python\setup_win32.cmd” – обёртка для setup_win32.py, нужная главным образом для внедрения манифеста в собранную .DLL.
- Компилируем DParser:
cd D bjam freeДля amd64:
cd D bjam free architecture=x86 address-model=64Для Itanium:
cd D bjam free architecture=ia64При этом собранные библиотеки будут скопированы в “C:\temp\D\dist”.
- Запускаем “Visual Studio 2005 Command Prompt” (либо “Visual Studio 2005 x64 Cross Tools Command Prompt”, либо “Visual Studio 2005 Itanium Cross Tools Command Prompt”) под учётной записью администратора (под любым пользователем, имеющим доступ на запись в каталог, где установлен Python).
- Если вы компилируете 32-х битную версию, то дополнительно следует поправить проверку на совместимость версий компилятора в “C:\Python25\Lib\distutils\msvccompiler.py”. Да этого нужно применить ещё один патч:
pushd C:\\Python25\\Lib\\distutils patch msvccompiler.py msvccompiler.py.diff popdЭтот шаг не обязателен, если вы собираете версию для amd64 или ia64.
- Cобираем и устанавливаем DParser for Python:
cd python setup_win32.cmd - И наконец, проверяем что у нас получилось:
python import dparser print dparser
Готово.
Спасибо, интересно.
Наткнулся на этот блог, прочитал несколько статей - очень интересно, спасибо.
А можешь вообще прокомментировать
patch msvccompiler.py msvccompiler.py.diffнесовместимость рантаймов разных версий Visual C++. Что делать разработчикам python, там не так много Win32-специалистов, и они не могут решить чем собственно собирать python - 2005 или 2003. В любом случае у разработчиков бинарных библиотек на другом компиляторе возникают проблемы - ведь в python память может выделяться в одном модуле, а освобождаться - в другом, и тогда за это отвечают разные версии msvcrt.
“Я тебя породил, я тебя и убью!” Каждый объект должен удаляться “своим” деаллокатором. Каком образом по объекту определить кто его создал - это другой вопрос. Скорее всего это тянет за собой смену интерфейса между интерпретатором и расширениями, а это в свою очередь означает целую кучу проблем с обратной совместимостью. Скажем, можно обязать расширения использовать аллокатор/деаллокатор, предоставляемые самим python.exe. И все будет хорошо, за исключением того, что существующие расширения никуда не денуться и их по-прежнему надо будет поддерживать.
thanks!