Сборка бинарных пакетов python при помощи MinGw


(Dmitriy Zverev) #1

В некоторых случайх пакеты Python включают в себя С\С++ код. Для их установки требуется либо дистрибутив, либо сборка при помощи компилятора.

В качестве компилятора используем gcc, который можно установить в составе MinGw.

Установить MinGw

В ходе установки из базового комплекта поставить: mingw32-base, mingw32-gcc-g++

В качестве дополнительных пакетов поставить: autoconf, make

Создать файл %PYTHONHOME%\lib\distutils\distutils.cfg со следующим содержанием:

[build]
compiler=mingw32```

Создать файл %HOME%\pydistutils.cfg с таким же содержимым

Создать файл pip_wrap.bat со следующим содержимым (значения в скобках "<>" заменить на свои):

@echo off

echo MinGW Enviroment Command Console
echo ....
@set MINGWROOT=C:\MinGW
@set MINGWBIN=%MINGWROOT%\bin
@set MINGWINCLUDE=%MINGWROOT%\include
@set MINGWLIB=%MINGWROOT%\lib
@set MINGWLIBEXEC=%MINGWROOT%\libexec\gcc\mingw32
@set MINGWBIN2=%MINGWROOT%\mingw32\bin
@set MINGWLIB2=%MINGWROOT%\mingw32\lib\ldscripts
@set MSYSBIN=%MINGWROOT%\msys\bin
@set MINGW=%MINGWROOT%;%MINGWBIN%;%MINGWINCLUDE%;%MINGWLIB%;%MINGWLIBEXEC%;%MINGWLIB2%;%MINGWLIB2%;%MSYSBIN%
@set Path=%MINGW%;%Path%

echo Pip call
echo ....
pip %*

Пример установки simplejson с поддержкой _speedups:

pip_wrap install simplejson
Downloading/unpacking simplejson
Downloading simplejson-3.3.2.tar.gz (67kB): 67kB downloaded
Running setup.py egg_info for package simplejson

Installing collected packages: simplejson
Running setup.py install for simplejson
building 'simplejson._speedups' extension
C:\MinGW\bin\gcc.exe -mdll -O -Wall -Ic:\Python27\include -Ic:\Python27\PC -c simplejson/_speedups.c -o build\temp.win32-2.7\Release\simplejson_speedups.o
C:\MinGW\bin\gcc.exe -shared -s build\temp.win32-2.7\Release\simplejson_speedups.o build\temp.win32-2.7\Release\simplejson_speedups.def -Lc:\Python27\libs -Lc:\Python27\PCbuild
-lpython27 -lmsvcr90 -o build\lib.win32-2.7\simplejson_speedups.pyd

Successfully installed simplejson
Cleaning up...
`


(Dmitriy Zverev) #2

Инструкций разной степени достоверности по подобной сборке в интернете полно. Собрал все их вместе и протестировал на себе.