Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Обновление: Как Zooba упоминается ниже, free x86 и AMD64 (x86-64) Компиляторы VC90 для Python-2.7 теперь доступны из Microsoft.

Обновление: Патч vcvarsall.bat для использования компиляторов x64 из SDK v7.0 напрямую с pip в любой оболочке вместо использования оболочки SDK и установки переменных окружения DISTUTILS_USE_SDK и MSSdk, как в приведенных ниже направлениях. См. Исправить vcvarsall.bat для установки расширений x64 для Python-2.7 с помощью 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 от Christoph Gohlke. Для virtualenv попробуйте преобразовать установщик двоичных дистрибутивных окон в файл wheel, который можно установить с помощью pip. Построение NumPy из источника не тривиально. Это стало возможным благодаря недавнему внедрению и доступности OpenBLAS, вилке GotoBLAS. Существуют оптимизированные двоичные файлы, доступные для Windows x86 и x86-64, а также источник, который относительно проще компилировать, чем GotoBLAS или ATLAS.

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

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

Рекомендуемым способом компиляции расширений является использование того же компилятора, который использовался для компиляции общей библиотеки Python [1-3]. официальный Python 2.7.x для Windows был скомпилирован с использованием Microsoft Visual С++ Компиляторы версии 9.0 [4] (ака MSVC90 или просто VC90) от Microsoft Visual Studio 2008 Professional, которые вы можете получить бесплатно Microsoft DreamSpark. По-видимому, компиляторы x64 по умолчанию не установлены, поэтому убедитесь, что они установлены вместе с компиляторами x86. Примечание. MS Visual Studio 2008 больше не может быть доступна, но MS Visual Studio 2010 позволит вам использовать инструментальную цепочку MSVC90, если она установлена, которую можно установить из 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 С++ 2008 redistributable. Примечание: Windows GCC из mingw-w64 использует msvcrt.dll, который не совпадает с msvcr90.dll или более поздней версией.

Если вы хотите сделать это бесплатно, вы можете использовать Microsoft Visual С++ 2008 Express SP1, но вам нужно будет добавить Windows SDK 7 для .NET Framework 3.5 SP1, поскольку в экспресс-версии нет есть компиляторы x64. Процедура установки расширений x64 С++ с VS2008 Express и SDK 7 очень похожа на процедуру для MSYS.

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

  • В меню "Пуск" выберите Все программы, затем Microsoft Windows SDK v7.0 и запустите CMD Shell, чтобы откройте окно командной строки, оптимизированное для Windows SDK.
  • Шаг №1 является эквивалентом ввода следующего в поле Выполнить из меню "Пуск" или из командной строки (aka C:\Windows\System32\cmd.exe):

    %COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd"
    

    ПРИМЕЧАНИЕ. Флаги /E:ON, который включает расширения команд и /V:ON, которые обеспечивают замедленное расширение переменных, необходимы для функции SetEnv.cmd, или вы получите сообщение о том, что компиляторы x64 не являются установлен, & c.

  • Затем введите setenv /Release /x64, который будет устанавливать переменные среды SDK специально для выпуска Windows 7 x64 (по умолчанию для debug или x86).

  • Введите set DISTUTILS_USE_SDK=1 нажмите return, а затем введите set MSSdk=1 и вернитесь, чтобы сообщить distutils.msvccompiler, что вы используете SDK, и что SDK определит все переменные среды.
  • Теперь используйте свой способ установки:
    • pip install pyyaml ntlk, который рекомендуется, см. ntlk, но вы должны иметь setuptools и pip.
    • python setup.py install для каждого загруженного, извлеченного tarball
    • easy_install pyyaml ntlk, который является старым способом и единственным способом установки яиц.

[1] Создание расширений C и С++ в Windows
[2] distutils.msvccompiler - Microsoft Compiler
[3] Руководство для Python Dev: Начало работы: Windows
[4] Какая версия визуальной студии - это питон, скомпилированный с

Ответ 2

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

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

  • Обновить setuptools до версии 6.0 или новее (pip install -U setuptools)

  • Установите пакет (pip install <whatever>)

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

Ответ 3

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

  • построить с помощью mingw
  • построить python 2.7 с помощью VS 2008 Express.
  • Я не уверен, какая версия хороша для сборки 3.2, но это может быть VS 2010.
  • вы можете скомпилировать python x64 из исходного кода с помощью вашего желаемого VS, но у вас будут проблемы с конкурированием с другими предварительно созданными пакетами.

Ответ 4

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

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

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

Ответ 5

Для 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:

  • Отредактируйте distutils/cygwinccompiler и в class Mingw32CCompiler

    • Замените старое -mno-cygwin fix на

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

      для gcc 4.9.2 - note для 5.4.0, no 'if', просто

      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()
      
  • Используйте setup.py со следующими

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

    #ifdef MS_WIN64
    #define strdup _strdup
    #endif
    
  • Наконец,

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

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