Компиляция модулей Python в Windows x64

Я начинаю некоторые проекты в обработке слов, и мне нужны NumPy и NLTK. Это был первый раз, когда я узнал easy_install и как скомпилировать новый модуль python в систему.

У меня есть Python 2.7 x64 plus против 11 и против 12. Также Cygwin (последний, я думаю). Я мог видеть в файле, который компилируется с помощью VS, что он ищет VS env с той же версией, что и тот, который скомпилировал код python, почему? Когда я жестко закодировал 11.0, который является моей версией, numpy не удалось постройте несколько странных ошибок относительно vcvarsall (его нашли vcvarsall, вероятно, неправильно использовал его).

не могу ли я создавать двоичные файлы python в Windows? Если нет,Могу ли я скомпилировать в Linux для Windows? (используя тот же метод, что и Google для Android SDK)

5 ответов


обновление: этот ответ теперь старше 5 лет! Python-2.7 будет устаревшим, поэтому вам действительно нужен компилятор Microsoft Visual C для Python-3. Взгляните на эта Вики Python на компиляторах MS Windows. MS Build Tools 2015 с VC-14.0-это то, что вам нужно для создания расширений для Python-3.5 и 3.6. Вы можете либо установить старый MS build tools 2015 который включает VC-14.0 или более новую MS build tools для 2017 клик по ссылке, затем прокрутите вниз, пока не найдете инструменты сборки для Visual Studio 2017 - который также включает в себя VC-14.0.

также, если ваши версии pip и setuptools обновлены, вы можете игнорировать всю эту глупую старую школьную чепуху MSSDK. Особенно, если вы используете VC для Python 2.7 или MS build tools 2015. С setuptools-24, он просто знает, где искать эти компиляторы, обнадеживающе.

обновление: As Zooba упоминает ниже бесплатные x86 и AMD64 (x86-64) vc90 c-компиляторы для Python-2.7 теперь доступны от Microsoft.

обновление: патч vcvarsall.bat использовать x64 компиляторы из SDK v7.0 непосредственно с pip в любой оболочке вместо использования оболочки SDK и настройки DISTUTILS_USE_SDK и MSSdk переменные среды в направлениях под. См.исправить vcvarsall.bat для установки расширений Python-2.7 x64 с v90 вместо sdk7.

tl; dr: используйте Windows SDK v7.0 компиляторов, откройте оболочку SDK и вызовите

C:\> setenv /release /x64
C:\> set DISTUTILS_USE_SDK=1
C:\> MSSdk=1

для построения Python 2.7.X расширения с использованием distutils,pip или easy_install. См.расширения пакетов Python x64 с pip, MSVC 2008 Express & SDK 7.

Примечание: ты можно установить Numpy оптимизирован с помощью Intel MKL от Кристофа Гольке. Для virtualenv попробуйте преобразовать установщик Windows двоичного дистрибутива в колеса файл, который можно установить с помощью pip. Здание включает в себя из источника не тривиально. Это стало возможным с недавним введением и наличием OpenBLAS, форк GotoBLAS. Есть доступны оптимизированные двоичные файлы для Windows x86 и x86-64 а также источник, который относительно проще компилировать, чем GotoBLAS или атлас.

Примечание: в прошлом я не рекомендовал компилировать NumPy из источника, потому что вам нужно было оптимизировать BLAS для вашей платформы, которая была очень трудоемкой, а ссылочные реализации BLAS (FORTRAN) или CBLAS (C/C++) были относительно низкими. Также NumPy зависит от LAPACK что также зависит от BLAS an дополнительное препятствие для построения NumPy. Однако двоичные файлы OpenBLAS уже скомпилированы с помощью LAPACK, поэтому это препятствие уже удалено. См.статические цепочки инструментов MinGW-w64 Карла Клеффнера для создания NumPy с OpenBLAS на Windows - он разрешил некоторые несовместимости ABI и проблемы, связанные с правильной библиотекой Microsoft Visual C Common Runtime library (msvcr90.dll для Python-2.7).

Итак, к основному вопросу об установке расширений Python в Windows 7 x64.

рекомендуемый способ компиляции расширений-использовать тот же компилятор, который используется для компиляции общей библиотеки Python [1-3]. The официальный Python 2.7.x для Windows был скомпилирован с помощью компиляторы Microsoft Visual C++ версии 9.0 [4] (он же MSVC90 или просто VC90) от Microsoft Visual Studio 2008 Professional, который вы могли бы получить бесплатно из Microsoft DreamSpark. Evidentally x64 компиляторы не установлены по умолчанию убедитесь, что они установлены вместе с компиляторами x86. Примечание: MS Visual Studio 2008 больше не может быть доступен, но MS Visual Studio 2010 позволит вам использовать msvc90 toolchain если установлен, который может быть установлен из Windows SDK7.

вы можете сказать, с какой версией был построен ваш Python, посмотрев на заголовок при выполнении интерпретатора python из командной строки. например: Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32 означает, что он был построен с VS 2008 С.++ Вы можете построить Python самостоятельно из источника, но это также трудная задача. В общем случае не рекомендуется смешивать среды выполнения компилятора, хотя на практике вы можете обнаружить, что они все еще работают.

если у вас есть ваше сердце на использование GNU GCC, тогда вам придется использовать mingw-w64, потому что MinGW предназначен только для собственных приложений x86, а не для AMD64/x86-64. Вам нужно будет

однако в конце концов вы будете еще необходимо связать со средой выполнения, с которой был построен python,msvcr90.dll, так что вам понадобится распространяемый Visual C++ 2008. Примечание: Windows GCC от mingw-w64 использует msvcrt.dll это не то же самое как msvcr90.dll или позднее.

если вы хотите сделать это бесплатно вы можете использовать Microsoft Visual C++ 2008 Express SP1 но вам нужно будет добавить SDK для Windows 7 для .Чистая рамки 3.5 с пакетом обновления 1 потому что экспресс-версия не есть компиляторы x64. Процедура установки расширений x64 C++ с VS2008 Express & SDK 7 очень похожа на процедуру установки расширений сайт cython для расширений Windows x64. Примечание: MS Visual Studio 2008 Express больше не доступен и не поддерживается.

FYI: вам не обязательно нужна Visual Studio для сборки с помощью Microsoft компиляторы. Они доступны бесплатно с соответствующим пакетом SDK. CL.EXE является исполняемым файлом компилятора, но вам нужно будет установить любые параметры платформы, которые обычно настраиваются Autotools или каким-либо другим инструментом, таким как CMAKE. CMAKE хорошо играет с MSVC, но Autotools AFAIK не работает с MSVC и потребует некоторой среды POSIX и утилит, которые в Windows доступны в префикса msys.

для многих пакетов Python, использующих distutils или setuptools, они могут компилировать расширения с помощью Windows SDK 7, следуя указаниям, которые размещены в различных местах через справочную документацию и Вики:

  1. с Меню "Пуск" выберите Все Программы затем Microsoft Windows SDK v7.0 и начало CMD Shell чтобы открыть окно команд, оптимизированное для Windows SDK.
  2. Шаг #1 является эквивалентом ввода следующего в Run


поскольку другие ответы, Microsoft выпустила пакет компилятора специально для создания расширений для Python 2.7 (и любой версии Python, которая использовала VS 2008/VC9). Вот как его использовать:

  1. перейти к http://aka.ms/vcpython27, загрузите и установите пакет (он довольно мал и не требует прав администратора)

  2. обновить setuptools до 6.0 или более поздней версии (pip install -U setuptools)

  3. установить ваш пакет (pip install <whatever>)

сочетание последней версии setuptools и этого пакета компилятора должно сделать это очень легко.


есть несколько способов сделать это, видимо.

  1. построить с помощью mingw
  2. построить python 2.7 с помощью VS 2008 express.
  3. Я не уверен, какая версия хороша для сборки 3.2, но это может быть VS 2010.
  4. вы можете скомпилировать python x64 из источника, используя желаемый VS, но у вас будут проблемы с компетенцией с другими предварительно построенными пакетами.

это сработало лучше всего для меня:

  1. установить Visual Studio Express 2008
  2. установить Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 от http://www.microsoft.com/en-us/download/details.aspx?id=3138
  3. на C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin и откройте Visual Studio 2008 x64 Win64 Command Prompt
  4. в этой оболочке, беги pip install <package>

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


для Windows 10, Python 2.7.11, Cygwin 2.5.2 и x86_64-w64-mingw32-gcc 4.9.2 или 5.4.0 (см. Примечание под 1 ниже), собирая комментарии из других мест, вот что мне пришлось сделать для моего расширения Python, чтобы скомпилировать, связать и победить условие гонки между msvcrt.dll и msvcr90.dll:

  1. редактировать distutils / cygwinccompiler, и в class Mingw32CCompiler

    • заменить старый-mno-cygwin исправить с

      if self.gcc_version < '4' or is_cygwingcc():
        no_cygwin = ' -nostdlib -lgcc'
      

      для gcc 4.9.2 -- Примечание для 5.4.0, нет "если", просто

      no_cygwin = ''
      
    • сделать правильный компилятор на месте:

              self.set_executables(compiler='x86_64-w64-mingw32-gcc%s -O -Wall' % no_cygwin,
                       compiler_so='x86_64-w64-mingw32-gcc%s -mdll -O -Wall' % no_cygwin,
                       compiler_cxx='x86_64-w64-mingw32-g++%s -O -Wall' % no_cygwin,
                       linker_exe='x86_64-w64-mingw32-gcc%s' % no_cygwin,
                       linker_so='x86_64-w64-mingw32-%s%s %s %s'
      
    • Примечание для x86_64-w64-mingw32-gcc 5.4.0, похоже, работает лучше без msvcr90, поэтому позвоните в get_msvcr условное:

              if self.gcc_version < '5':
                  self.dll_libraries = get_msvcr()
      
  2. использовать a setup.py с после

    libdirs=['C:\Python27\libs',...]
    macros=[('MS_WIN64','1'),...]
    platform="WIN32"
    
  3. исправьте один из моих заголовков исходного файла, чтобы включить

    #ifdef MS_WIN64
    #define strdup _strdup
    #endif
    
  4. наконец,

     /c/Python27/python [editted setup].py -v build --compiler=mingw32
     /c/Python27/python [editted setup].py -v install
    

некоторые из вышеперечисленных могут быть не совсем в оптимальном месте, но это заставило мое расширение работать...