在Windows x64上编译Python模块

cod*_*ber 16 python compilation visual-studio windows-7-x64 python-2.7

我正在开始一些文字处理项目,我需要NumPy和NLTK.这是我第一次了解easy_install以及如何将新的python模块编译到系统中.

我有Python 2.7 x64加VS 11和VS 12.还有Cygwin(我猜的最新版本).我可以在使用VS编译的文件中看到它使用与编译python代码的版本相同的版本查找VS env,为什么?当我硬编码11.0这是我的版本时,numpy无法建立几个奇怪的错误vcvarsall(它发现vcvarsall,可能误用了它).

我不能在Windows上构建python二进制文件吗?如果没有,我可以在Linux for Windows上交叉编译吗?(使用与Google相同的Android SDK方法)

Mar*_*ski 32

更新:这个答案已经超过5年了!Python-2.7即将被弃用,所以你真正需要的是用于Python-3的Microsoft Visual C编译器.在MS Windows编译器上查看这个Python wiki.使用VC-14.0的MS Build Tools 2015是构建Python-3.5和3.6扩展所需的.您可以安装包含VC-14.0 的旧版MS构建工具20152017年更新的MS构建工具 - 单击该链接,然后向下滚动,直到找到Visual Studio 2017的构建工具 - 其中还包括VC-14.0.

此外,如果您的pip和setuptools版本是最新的,那么你可以忽略所有这些愚蠢的旧学校MSSDK废话.特别是如果您使用VC for Python 2.7或MS构建工具2015.自setuptools-24以来,它只知道在哪里寻找这些编译器,希望如此.

更新:正如Zooba在下面提到的,现在可以从Microsoft免费获得用于Python-2.7的免费x86和AMD64(x86-64)VC90 c编译器.

更新: 修补vcvarsall.bat程序直接pip在任何shell中使用SDK v7.0中的x64编译器,而不是使用SDK shell和设置DISTUTILS_USE_SDK以及MSSdk环境变量,如下面的说明.请参阅修复vcvarsall.bat以使用v90而不是sdk7安装Python-2.7 x64扩展.

tl; dr:使用Windows SDK v7.0编译器,打开SDK shell并调用

C:\> setenv /release /x64
C:\> set DISTUTILS_USE_SDK=1
C:\> MSSdk=1
Run Code Online (Sandbox Code Playgroud)

使用distutils构建Python 2.7.x扩展,pipeasy_install.请参阅使用pip,MSVC 2008 Express和SDK 7的Python x64 Package Extensions.

注意:您可以使用Christoph Gohlke的英特尔MKL安装Numpy优化.对于virtualenv,尝试将二进制分发窗口安装程序转换为可以使用pip 安装的wheel文件.从源代码构建NumPy 非易事.它已成为近期的引进和可用性的可能性OpenBLAS的叉子GotoBLAS.有针对Windows x86和x86-64的优化二进制文件以及比GotoBLAS或ATLAS编译相对简单的源代码.

注意:过去我没有建议从源代码编译NumPy,因为你必须为你的平台优化BLAS,这是非常耗时的,并且参考BLAS(FORTRAN)或CBLAS(C/C++)实现的性能相对较低.另外NumPy依赖于LAPACK,这也取决于BLAS构建NumPy的额外障碍.但是OpenBLAS二进制文件已经用LAPACK编译,所以这个障碍已经被删除了.请参阅Carl Kleffner的静态MinGW-w64工具链,在Windows上使用OpenBLAS构建NumPy - 他已经解决了一些ABI不兼容问题以及链接到正确的Microsoft Visual C Common Runtime库(msvcr90.dllPython-2.7)的问题.

那么关于在Windows 7 x64上安装Python扩展的主要问题.

编译扩展的推荐方法是使用用于编译Python共享库的相同编译器[1-3].在为Windows Python官方2.7.x使用编译微软的Visual C++编译器9.0版[4](又名MSVC90或干脆VC90)从Microsoft Visual Studio 2008专业,你也许能够得到免费微软的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 C++构建的.您可以从源代码自己构建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速成SP1,但你将需要添加的Windows SDK 7 .NET框架3.5 SP1,因为Express版本确实具备的x64编译器.使用VS2008 Express和SDK 7安装x64 C++扩展的过程与用于Windows x64扩展cython站点上的过程非常相似.注意:MS Visual Studio 2008 Express不再可用或不受支持.

仅供参考:您不一定需要Visual Studio来使用Microsoft编译器进行构建.它们可以通过适当的SDK包免费获得.CL.EXE是编译器可执行文件,但您必须设置通常由Autotools或其他工具(如CMAKE)配置的平台选项.CMAKE可以很好地与MSVC配合使用,但是Autotools AFAIK不能与MSVC一起使用,并且需要一些POSIX环境和Windows上的实用程序在MSYS中可用.

对于许多使用distutils或setuptools的Python包,他们可以通过参考文档和wiki遵循各个地方发布的指示,使用Windows SDK 7编译扩展:

  1. 从" 开始"菜单中选择" 所有程序",然后选择" Microsoft Windows SDK v7.0",并启动CMD Shell以打开针对Windows SDK优化的命令窗口.
  2. 步骤#1相当于在" 开始"菜单"运行"框中或从命令提示符(aka C:\Windows\System32\cmd.exe)中键入以下内容:

    %COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd"
    
    Run Code Online (Sandbox Code Playgroud)

    注意:/E:ON启用命令扩展的标志和/V:ON启用延迟变量扩展的标志都是运行所必需的SetEnv.cmd,或者您将收到未安装x64编译器的消息,&c.

  3. 然后键入setenv /Release /x64哪些将专门为Windows 7 x64版本设置SDK环境变量(vs debug或x86是默认值).

  4. 键入set DISTUTILS_USE_SDK=1hit return,然后键入set MSSdk=1并返回以告知distutils.msvccompiler您正在使用SDK,并且SDK将确定所有环境变量.
  5. 现在使用您选择的安装方法:
    • pip install pyyaml ntlk这是推荐的方法,请参阅ntlk,但您必须安装setuptoolspip.
    • python setup.py install 为每个下载,提取的tarball
    • easy_install pyyaml ntlk 这是旧方式和安装鸡蛋的唯一方法.

[1] 在Windows上构建C和C++扩展
[2] distutils.msvccompiler - Microsoft Compiler
[3] Python开发指南:入门:Windows
[4] 这个python编译的Visual Studio是什么版本的

  • 如果要为Python 2.7-3.2构建扩展,则http://aka.ms/vcpython27和setuptools 6.0或更高版本的编译器包现在是最简单的选项. (2认同)

Zoo*_*oba 11

从其他答案开始,Microsoft发布了一个专门用于构建Python 2.7扩展的编译器包(以及使用VS 2008/VC9的任何Python版本).以下是如何使用它:

  1. 转到http://aka.ms/vcpython27,下载并安装软件包(它相当小,不需要管理员权限)

  2. 将setuptools更新到6.0或更高版本(pip install -U setuptools)

  3. 安装你的包裹(pip install <whatever>)

最新的setuptools版本和这个编译器包的组合应该可以很容易地做到这一点.