我正在开始一些文字处理项目,我需要numpy和nltk。
这是我第一次了解easy_install
以及如何将Python的新模块编译到系统中。
我有python 2.7 x64 plus vs 11和vs 12。还有Cygwin(我猜是最新的一个)。
我可以在使用vs编译的文件中看到,它查找的vs env版本与编译python代码的版本相同,为什么?
当我硬编码11.0(这是我的版本)时,numpy未能建立在有关vcvarsall
的几个奇怪错误之上(它发现了vcvarsall
,可能误用了它)。
我不能在Windows上构建python二进制文件吗?
如果没有,我可以在LinuxforWindows上交叉编译吗?(使用与Google相同的Android SDK方法)
最佳答案
更新:这个答案已经超过5年了!python-2.7即将被弃用,所以您真正需要的是用于python-3的Microsoft Visual C编译器。看看this Python wiki on MS Windows Compilers。MS Build Tools 2015 with VC-14.0是构建Python-3.5和3.6扩展所需的工具。您可以安装旧的包含VC-14.0的MS build tools 2015,也可以安装新的MS build tools for 2017—单击链接,然后向下滚动,直到找到包含VC-14.0的Build Tools for Visual Studio 2017。
此外,如果您的PIP和设置工具版本是最新的,那么您可以忽略所有愚蠢的老学校mssdk胡说八道。尤其是在使用vcforpython2.7或MS构建工具2015时。由于SETUPTOOLS-24,它只知道在哪里查找这些编译器,希望如此。
更新:正如下面提到的,Zooba。
更新:free x86 and AMD64 (x86-64) VC90 c-compilers for Python-2.7 are now available from Microsoft以直接在任何shell中使用来自sdk v7.0的x64编译器,而不是使用sdk shell,并按照以下说明设置vcvarsall.bat
和pip
环境变量。请参见Patch DISTUTILS_USE_SDK
。
tl;dr:使用Windowssdkv7.0编译器,打开sdk shell并调用
C:\> setenv /release /x64
C:\> set DISTUTILS_USE_SDK=1
C:\> MSSdk=1
使用distutils、
MSSdk
或pip
构建python 2.7.x扩展。请参见Fix vcvarsall.bat to install Python-2.7 x64 extensions with v90 instead of sdk7。注意:您可以安装Python x64 Package Extensions with pip, MSVC 2008 Express & SDK 7。对于virtualenv,请尝试将二进制发行版Windows安装程序转换为可与pip一起安装的Numpy optimized using Intel MKL from Christoph Gohlke文件。从源代码构建wheel并不容易。随着NumPy的推出和可用性,这已成为一种可能性,它是OpenBLAS的一个分支。还有比gotobis或GotoBLAS更容易编译的optimized binaries available for Windows x86 and x86-64和source。
注意:在过去,我没有推荐从源编译NUMPY,因为您必须优化平台的BLA,这是非常密集的,并且参考BLAS(FORTRAN)或CBLAS(C/C++)实现相对较低。同样,numpy依赖于ATLAS这也依赖于blas,这是构建numpy的另一个障碍。然而,openblas二进制文件已经用lapack编译,所以这个障碍已经被消除。请参见LAPACK—他解决了一些ABI不兼容问题,并解决了链接到正确的Microsoft Visual C公共运行库的问题(
easy_install
for python-2.7)。因此,继续讨论有关在Windows7x64上安装Python扩展的主要问题。
编译扩展的推荐方法是使用编译Python共享库[1-3]时使用的编译器。Carl Kleffner's static MinGW-w64 toolchains to build NumPy with OpenBLAS on Windows是使用official Python 2.7.x for Windows编译的,您可以从Microsoft Visual C++ Compilers version 9.0 [4] (aka MSVC90 or simply VC90) from Microsoft Visual Studio 2008 Professional中免费获得。显然,X64编译器在默认情况下没有安装,因此请确保它们与X86编译器一起安装。注意:MS Visual Studio 2008可能不再可用,但MS Visual Studio 2010将允许您使用MSVC90工具链(如果已安装),该工具链可以从Windows SDK7安装。
当您从命令行执行Python解释器时,可以通过查看头部来判断您的Python是用什么版本构建的。例如:
msvcr90.dll
意味着它是用VS 2008 C++构建的。您可以自己从源代码构建Python,但这也是一项艰巨的任务。一般来说,不建议混合使用编译器运行时,尽管在实践中您可能会发现它们仍然有效。如果您的心脏设置为使用Microsoft DreamSpark,则必须使用GNU GCC,因为mingw-w64仅用于本机x86应用程序,而不是AMD64/x86-64。你需要
MinGW
create a distutils config file to specify the mingw compiler和
remove the -mno-cygwin bug from distutils.cygwinccompiler.Mingw32ccompiler
然而,最终,您仍然需要链接到python构建时使用的运行时,
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
,因此您需要export a library definitions file using either pexports.exe
from msys or gendef.exe
from msys2 and make a static library libpython27.a
using dlltool.exe
(msys/msys2) (but the newest releases of Official Python for Windows already have this file in the Python27\lib
folder, thanks!)。注意:mingw-w64中的windows gcc使用的是Visual C++ 2008 redistributable。如果您想免费使用,可以使用
msvcr90.dll
which is not the same as msvcrt.dll
or later,但您需要添加Microsoft Visual C++ 2008 Express SP1,因为Express版本没有x64编译器。用VS2008 Express和SDK 7安装X64 C++扩展的过程与Windows SDK 7 for .NET Frameworks 3.5 SP1中的程序非常类似。注意:MS Visual Studio 2008学习版不再可用或不受支持。仅供参考:您不一定需要使用Microsoft编译器来构建Visual Studio。它们可以通过适当的SDK包免费提供。
msvcr90.dll
是编译器可执行文件,但您必须设置通常由自动工具或其他工具(如cmake)配置的任何平台选项。cmake在msvc上运行得很好,但是autotools afaik不适用于msvc,需要一些posix环境和实用程序,这些在Windows上可以在cython site for windows x64 extensions中找到。对于许多使用distuils或setuptools的python包,它们可以使用windows sdk 7编译扩展,方法是遵循参考文档和wikis中在不同位置发布的说明:
从“开始”菜单中选择“所有程序”,然后选择“Microsoft Windows SDK V7.0”,然后启动“命令行解释器”,打开为Windows SDK优化的命令窗口。
步骤1相当于在“开始”菜单或命令提示符(aka
CL.EXE
)的“运行”框中键入以下内容:%COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd"
注意:启用命令扩展的标志
C:\Windows\System32\cmd.exe
和启用延迟变量扩展的标志/E:ON
都是运行/V:ON
所必需的,否则您将收到一条消息,说明未安装x64编译器,&c。然后键入
SetEnv.cmd
以专门为Windows 7 x64版本设置sdk环境变量(vs debug或x86是默认版本)。键入
setenv /Release /x64
hit return,然后键入set DISTUTILS_USE_SDK=1
并返回,告诉set MSSdk=1
您正在使用sdk,sdk将确定所有环境变量。现在使用您选择的安装方法:
distutils.msvccompiler
这是建议的方式,MSYS,但您必须安装了see ntlk和setuptools。对于每个下载的提取的tarball
pip install pyyaml ntlk
这是旧方法,也是安装鸡蛋的唯一方法。[1]pip
[2]Building C and C++ Extensions on Windows
[3]distutils.msvccompiler — Microsoft Compiler
[4]Python Dev Guide: Getting Started: Windows
关于python - 在Windows x64上编译Python模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267463/