воскресенье, 12 февраля 2012 г.

Сборка PyPy из исходников под Windows

На данную тему есть хорошее руководство “PyPy on Windows”, которое послужило для меня отправной точкой. Здесь я опишу некоторые дополнительные детали, которые могут вам пригодиться при сборке c использованием компилятора Microsoft Visual С++.

В первую очередь понадобиться свежая версия Python 2.x (обязательно x32-bit) или уже собранный PyPy (рекомендуется для более быстрой сборки). Интересно, что во втором случае происходит процесс сходный раскрутке компилятора. Процесс сборки потребляет большое количество оперативной памяти, и эта величина больше 2Гб:

Python2GB

В тоже время наш интерпретатор x32-bit, поэтому к python.exe (или pypy.exe) требуется применить небольшой hack:

editbin /largeaddressaware python.exe

Данную утилиту можно найти в папке с установленным Microsoft Visual C++ (например, “c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe”). Стоит отметить, что на Windows x64-bit необходимо запускать версию, которая лежит в подпапке amd64. В случае успешного применения, дата и время модификация целевого файла должны измениться.

Все необходимые дополнительные библиотеки (zlib, bz2, expat, openssl) собираются вполне успешно. Единственная проблема возникла с OpenSSL, компиляция которой не проходила из-за одного warning, что вылечилось простым удалением флага “/WX” из файла “ms/nt.mak”. Сборку этих библиотек и самого PyPy необходимо выполнять, предварительно запустив “Visual Studio Command Prompt” (vsvars32.bat).

Теперь осталось только настроить пути к сторонним библиотекам. Пути ко всем их заголовочным файлам надо добавить в переменную окружения INCLUDE, пути к статическим библиотекам (.lib) – в LIB, пути к динамическим библиотекам (.dll) – в PATH. Я для этого создал три папки bin, include и lib. Затем скопировал туда все необходимые файлы и в переменные окружения добавил пути только к этим папкам.  В итоге получилось  следующая структура папок и  файлов:

  • bin
    • libexpat.dll
    • openssl.exe
    • zlib1.dll
  • include
    • bzlib.h
    • expat.h
    • expat_external.h
    • openssl
      • … (файлы из “openssl-0.9.8k/inc32/openssl”)
    • zconf.h
    • zlib.h
  • lib
    • libbz2.lib
    • libeay32.lib
    • libexpat.dll
    • libexpat.exp
    • libexpat.lib
    • ssleay32.lib
    • zdll.exp
    • zdll.lib
    • zlib.lib
    • zlib1.dll

Ну вот! Вроде все. Можно приступить к сборке PyPy…

Комментариев нет:

Отправить комментарий