更新:这个答案现在已经超过 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 构建工具 2015或2017年的较新的 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
使用 distutilspip
或easy_install
. 请参阅带有 pip、MSVC 2008 Express 和 SDK 7 的 Python x64 包扩展。
注意:您可以安装使用来自 Christoph Gohlke 的英特尔 MKL 优化的 Numpy。对于 virtualenv,尝试将二进制分发 Windows 安装程序转换为可以使用 pip安装的轮文件。从源代码构建NumPy并非易事。随着OpenBLAS ( GotoBLAS的一个分支)的最近推出和可用性,这已成为一种可能。有适用于 Windows x86 和 x86-64 的优化二进制文件以及比 GotoBLAS 或ATLAS更易于编译的源代码。
注意:过去我不建议从源代码编译 NumPy,因为您必须为您的平台优化 BLAS,这非常耗时,并且参考 BLAS (FORTRAN) 或 CBLAS (C/C++) 实现的性能相对较低. NumPy 还依赖于LAPACK,LAPACK 也依赖于 BLAS,这是构建 NumPy 的额外障碍。但是 OpenBLAS 二进制文件已经用 LAPACK 编译,所以这个障碍已经被消除了。请参阅Carl Kleffner 的静态 MinGW-w64 工具链以在 Windows 上使用 OpenBLAS 构建 NumPy - 他解决了一些 ABI 不兼容问题以及链接到正确的 Microsoft Visual C Common Runtime 库(msvcr90.dll
适用于 Python-2.7)的问题。
那么接下来是关于在 Windows 7 x64 上安装 Python 扩展的主要问题。
编译扩展的推荐方法是使用与编译 Python 共享库 [1-3] 相同的编译器。用于 Windows的官方 Python 2.7.x是使用Microsoft Visual Studio 2008 Professional 中的 Microsoft Visual C++ 编译器版本 9.0 [4](又名 MSVC90 或简称 VC90)编译的,您可以从Microsoft DreamSpark免费获得。显然 x64 编译器默认没有安装,因此请确保它们与 x86 编译器一起安装。注意:MS Visual Studio 2008 可能不再可用,但 MS Visual Studio 2010 将允许您使用 MSVC90 工具链(如果已安装,可从 Windows SDK7 安装)。
当你从命令行执行 python 解释器时,你可以通过查看标题来判断你的 Python 是用什么版本构建的。eg :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 redistributable。注意:来自 mingw-w64 的 Windows GCC 使用msvcrt.dll
的不是相同msvcr90.dll
或更高版本的.
如果您想免费使用,您可以使用Microsoft Visual C++ 2008 Express SP1,但您需要为 .NET Frameworks 3.5 SP1 添加 Windows SDK 7,因为 express 版本没有x64编译器。使用 VS2008 Express & SDK 7 安装 x64 C++ 扩展的过程与cython 站点上的 windows x64 扩展非常相似。注意:MS Visual Studio 2008 Express 不再可用或不再受支持。
仅供参考:您不一定需要 Visual Studio 来使用 Microsoft 编译器进行构建。它们可通过适当的 SDK 包免费获得。CL.EXE
是编译器可执行文件,但您必须设置通常由 Autotools 或其他工具(如 CMAKE)配置的任何平台选项。CMAKE 与 MSVC 配合得很好,但 Autotools AFAIK 不适用于 MSVC,并且需要一些 POSIX 环境和实用程序,这些在 Windows 上可在MSYS中使用。
对于许多使用 distutils 或 setuptools 的 Python 包,他们可以使用 Windows SDK 7 编译扩展,方法是按照参考文档和 wiki 发布在各个地方的说明:
- 从开始菜单中选择所有程序,然后选择Microsoft Windows SDK v7.0并启动CMD Shell以打开针对 Windows SDK 优化的命令窗口。
第 1 步相当于从“开始”菜单或命令提示符(又名)在“运行”框中键入以下内容: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
将专门为 Windows 7 x64 版本设置 SDK 环境变量的类型(与默认的 debug 或 x86 相比)。
- 键入
set DISTUTILS_USE_SDK=1
hit 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]在 Windows 上构建 C 和 C++ 扩展
[2] distutils.msvccompiler — Microsoft 编译器
[3] Python 开发指南:入门:Windows
[4]这个 python 是用什么版本的 Visual Studio 编译的