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构建工具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
Run Code Online (Sandbox Code Playgroud)
使用distutils构建Python 2.7.x扩展,pip或easy_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)的问题.
编译扩展的推荐方法是使用用于编译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.你需要
pexports.exemsys或gendef.exemsys2 导出库定义文件并libpython27.a使用dlltool.exe(msys/msys2)创建静态库(但最新版本的官方Python for Windows已经在Python27\lib文件夹中包含此文件,谢谢!).但是最后你仍然需要链接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相当于在" 开始"菜单的"运行"框中或从命令提示符(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.
然后键入setenv /Release /x64哪些将专门为Windows 7 x64版本设置SDK环境变量(vs debug或x86是默认值).
set DISTUTILS_USE_SDK=1hit 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 Compiler
[3] Python开发指南:入门:Windows
[4] 这个python编译的Visual Studio是什么版本的
Zoo*_*oba 11
从其他答案开始,Microsoft发布了一个专门用于构建Python 2.7扩展的编译器包(以及使用VS 2008/VC9的任何Python版本).以下是如何使用它:
转到http://aka.ms/vcpython27,下载并安装软件包(它相当小,不需要管理员权限)
将setuptools更新到6.0或更高版本(pip install -U setuptools)
安装你的包裹(pip install <whatever>)
最新的setuptools版本和这个编译器包的组合应该可以很容易地做到这一点.
| 归档时间: |
|
| 查看次数: |
17195 次 |
| 最近记录: |