Not a kernel guy

… in the Windows kernel team

Tuesday, August 28, 2007

Как собрать DParser for Python с помощью Visual C++ 2005?

Существует два способа собрать DParser for Python под Windows:

  1. Легкий – воспользоваться GCC из MinGW и немного пошаманить;
  2. Интересный – попытаться сделать тоже самое с помощью Visual C++ 2005.

Естественно, что я выбрал второй вариант. :-)

(На самом деле причина довольно прозаична – не хотелось собирать один проект двумя разными компиляторами).

Исходные данные:

  • Python v2.5.1. Я пробовал x86 и x64 варианты. Версия для Itanium должна работать точно так же;
  • DParser v1.15;
  • Boost.Build v2. Любая другая система сборки проектов тоже подойдёт;
  • Visual C++ 2005.

Последовательность действий:

  1. Распаковываем DParser куда-нибудь, скажем “C:\temp\D”.
  2. Применяем патч, который в добавляет недостающие (из-за отсутствующих заголовков) объявления и правит кое-где код.
    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.
  3. Компилируем 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”.

  4. Запускаем “Visual Studio 2005 Command Prompt” (либо “Visual Studio 2005 x64 Cross Tools Command Prompt”, либо “Visual Studio 2005 Itanium Cross Tools Command Prompt”) под учётной записью администратора (под любым пользователем, имеющим доступ на запись в каталог, где установлен Python).
  5. Если вы компилируете 32-х битную версию, то дополнительно следует поправить проверку на совместимость версий компилятора в “C:\Python25\Lib\distutils\msvccompiler.py”. Да этого нужно применить ещё один патч:
    pushd C:\\Python25\\Lib\\distutils
    patch msvccompiler.py msvccompiler.py.diff
    popd

    Этот шаг не обязателен, если вы собираете версию для amd64 или ia64.

  6. Cобираем и устанавливаем DParser for Python:
    cd python
    setup_win32.cmd
  7. И наконец, проверяем что у нас получилось:
    python
    import dparser
    print dparser
    DParser has been installed successfully.

Готово.

Posted at 11:24 pm •

RSS feed | Trackback URI

5 Comments »

Trackback by Зеркало: Not a kernel guy — August 28, 2007 @ 11:28 pm

Как собрать DParser for Python с помощью Visual C++ 2005?…

Существует два способа собрать DParser for Python под Windows:
Легкий – восполь…

 
Comment by Anonymous — August 29, 2007 @ 12:48 am

Спасибо, интересно.

 
Comment by Alxy Sav — November 26, 2007 @ 3:24 am

Наткнулся на этот блог, прочитал несколько статей - очень интересно, спасибо.
А можешь вообще прокомментировать
patch msvccompiler.py msvccompiler.py.diff
несовместимость рантаймов разных версий Visual C++. Что делать разработчикам python, там не так много Win32-специалистов, и они не могут решить чем собственно собирать python - 2005 или 2003. В любом случае у разработчиков бинарных библиотек на другом компиляторе возникают проблемы - ведь в python память может выделяться в одном модуле, а освобождаться - в другом, и тогда за это отвечают разные версии msvcrt.

Comment by Not a kernel guy — November 26, 2007 @ 8:58 pm

В любом случае у разработчиков бинарных библиотек на другом компиляторе возникают проблемы - ведь в python память может выделяться в одном модуле, а освобождаться - в другом, и тогда за это отвечают разные версии msvcrt.

“Я тебя породил, я тебя и убью!” Каждый объект должен удаляться “своим” деаллокатором. Каком образом по объекту определить кто его создал - это другой вопрос. Скорее всего это тянет за собой смену интерфейса между интерпретатором и расширениями, а это в свою очередь означает целую кучу проблем с обратной совместимостью. Скажем, можно обязать расширения использовать аллокатор/деаллокатор, предоставляемые самим python.exe. И все будет хорошо, за исключением того, что существующие расширения никуда не денуться и их по-прежнему надо будет поддерживать.

 
 
Comment by heretiqu3@bk.ru — December 8, 2007 @ 2:35 am
 

Your Comment (smaller | larger)

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress