我正在开始一些文字处理项目,我需要NumPy和NLTK。那是我第一次知道easy_install
如何将新的python模块编译到系统中。
我有Python 2.7 x64加上VS 11和VS12。还有Cygwin(我猜是最新的)。我可以在使用VS进行编译的文件中看到,它查找的VS
env与编译python代码的版本相同,为什么?当我对我的版本11.0进行硬编码时,numpy无法建立关于以下几个奇怪的错误的信息vcvarsall
(它发现了vcvarsall
,可能是滥用了它)。
我不能在Windows上构建python二进制文件吗?如果没有,我可以在Windows版Linux上交叉编译吗?(使用与Android
SDK的Google相同的方法)
更新: 这个答案已经超过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
在任何外壳中使用SDK
v7.0中的x64编译器,而不是按以下说明使用SDK外壳以及设置DISTUTILS_USE_SDK
和MSSdk
环境变量。请参阅Fix
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
或构建Python 2.7.x扩展easy_install
。请参阅带有pip的Python
x64软件包扩展,MSVC 2008 Express&SDK
7。
注意 :您可以使用Christoph Gohlke的Intel
MKL安装经过优化的Numpy。对于virtualenv,请尝试将二进制分发窗口安装程序转换为可以通过pip安装的wheel文件。从源代码构建NumPy
并
非易事。随着GotoBLAS的分支OpenBLAS的最新推出和上市,它成为可能。有针对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)。
推荐的编译扩展方式是使用与编译Python共享库[1-3]相同的编译器。适用于Windows的官方Python
2.7.x是使用Microsoft Visual Studio 2008
Professional的Microsoft Visual C ++编译器版本9.0 [4](aka
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。您将需要
pexports.exe
msys或gendef.exe
msys2导出库定义文件,并libpython27.a
使用dlltool.exe
(msys / msys2)制作一个静态库(但最新的Windows官方Python版本已经在Python27\lib
文件夹中包含此文件,谢谢!)。但是最后,您 仍然 需要链接到构建python的运行时msvcr90.dll
,因此您将需要Visual C ++ 2008
redistributable。
注意:mingw-w64使用的Windows
GCCmsvcrt.dll
与msvcr90.dll
或更高版本不一样。
如果你想这样做免费的,你可以使用微软的Visual C ++ 2008速成SP1,但你将需要添加的Windows SDK 7 .NET框架3.5
SP1,因为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在各个地方发布的说明进行操作:
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版本(相对于默认为debug或x86)设置SDK环境变量。
键入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
对于每个下载的,提取的tarballeasy_install pyyaml ntlk
这是安装鸡蛋的旧方法,也是唯一方法。[1]在Windows上构建C和C ++扩展
[2] distutils.msvccompiler-
Microsoft编译器
[3]
Python开发指南:入门:Windows
[4][此python使用哪个版本的VisualStudio?