系统:win10

手头有个python模块,是用C写的,想编译安装就需要让python调用C编译器。直接编译发现使用的是vc9编译,不支持C99标准(两个槽点:为啥VS2008都还不支持C99?手头这个C代码为啥不好好写?)

anyway,此时两个想法,一个是改C源码,另一个是自行用VS2013编译一个python。事后证明第一个想法简单容易。。第二个想法实际试过之后,感觉难度很大,水很深,最后也没有淌出这浑水,简单记录下过程。

==== 分割线 ====
因为现在(2016年11月4日)python2.7在windows下的安装包,无论是直接python27.exe还是anaconda2安装的python,都是用vc9(vs2008)编译的。(python没啥神秘的,不妨简单认为python就是一个用C/C++写的一个项目,就像OpenCV这种)。

但是现在都2016了,为什么还要用VS2008来编译呢?手头要编译的一个python模块,其C代码需要C99支持,VS2013才开始支持C99,VS2015又过于巨无霸,那就用VS2013编译一个python呢?

  1. 下载python源码,装svn
    解压后进入D:\build\Python-2.7.12\PCbuild目录
    发现有个externals目录里面是空的。像ssl tk tcl sqlite等模块都需要把C源码放这里的。手动放肯定是姿势有问题的。看readme发现需要装svn并添加到path,调用get_externals.bat会使用svn从python的repo上自动checkout下来这些external的源码
  2. 编译
    双击打开PCbuild\pcbuild.sln
    注意选择x64 release模式
  3. 呃,这里就各种问题了
    比如nmake找不到,这需要手动添加到path再重开vs
    再比如tcl.h等头文件找不到,怎么会找不到呢,明明在externals目录中好不好。需要手动添加
    ...

最后发现tcl, tk, tix,_tkinter这4个项目,死活编译不出来,真是扫兴。当然如果只是要用python,那应该已经编译好了。

VS2013编译python源码的更多相关文章

  1. 用vs2013编译lua源码方法(一)

    用vs2013编译lua源码方法 来源:网络    编辑:admin 1.下载lua源码:lua-5.2.3.tar.gz,解压 2.用vs2013建立一个win32工程: 1)下载后解压到一个目录下 ...

  2. windows使用VS编译python源码

    使用VS2021编译python源码 说明,使用VS2019也是可以的. 环境准备 对于VS2019首要要安装必要的环境 到python官网下载源码压缩包以及解压(红色箭头任选一个都行) 打开下载好的 ...

  3. ubuntu编译python源码的坑

    在linux平台下编译python时只需要3条命令. 编译步骤 在github或https://www.python.org/downloads/中下载python源码 解压压缩包进路目录执行 1. ...

  4. 用vs2013编译lua源码方法

    1.下载lua源码:lua-5.2.3.tar.gz,解压 2.用vs2013建立一个win32工程: 1)下载后解压到一个目录下,这里假设解压到  F:\lua-5.2.3  注意下载的版本,如果是 ...

  5. vs2013编译obs源码

    obs源码下载 一种是在GitHub上下载最新的代码 git clone --recursive https://github.com/jp9000/obs-studio.git --recursiv ...

  6. 《python源码剖析》笔记一——python编译

    1.python的架构: 2.python源码的组织结构: 3.windows环境下编译python:

  7. (转载)Linux如何编译安装源码包软件

    一.什么是源码包软件: 顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件最常见:在国内源可见的软件几乎绝迹:大多开源软件都是国外出品:在国内较为出名的开源软件有fcitx;l ...

  8. [原]在win上编译 subversion 源码实践Tonyfield的专栏

    (百度和网页的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。) [原]在win上编译 subversion 源码实践 2013-6-9阅读400 评论0 (参考 ...

  9. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    昨晚在编译源码,make一段时间之后报错如下: # A fatal error has been detected by the Java Runtime Environment: # # SIGSE ...

随机推荐

  1. JS的递归与TCO尾调用优化

    转自:https://segmentfault.com/a/1190000004018047 这两天搜了下JS递归的相关文章, 觉得这篇文章很不错, 就顺手翻译了下,也算给自己做个笔记,题目是我自己加 ...

  2. matlab FDR校正

    http://home.52brain.com/forum.php?mod=viewthread&tid=27066&page=1#pid170857 http://www.mathw ...

  3. 恢复Reflector反编译后资源文件的办法

    反编译问题: 1.路径问题:如果遇到了Path.Combine,有错误改下即可 2.资源文件问题: 在Reflector下,对左边的资源管理窗口的Resources文件夹下的资源文件,进行右键点击,选 ...

  4. POJ 3714 Raid

    Description After successive failures in the battles against the Union, the Empire retreated to its ...

  5. ASP.NET MVC读取XML并使用ViewData显示

    看到网上一个网友问及,无法获取XML某一个节点内容.下面Insus.NET在ASP.NET MVC环境下实现它. 先把XML文件放入App_Data目录,当然你可以放在自建目录中.打开看看它有几层,几 ...

  6. jinja模版

    实现不同机器的差异化配置                 把apache监听的端口统一改为8080     把配置文件files/httpd.conf 文件做成模版         修改lamp.sl ...

  7. IE8和W3C标准下IFRAME刷新和URL的区别

    一个页面中包含了一个iframe,我们要刷新这个iframe的情况 url在IE8和W3C以及IE11的区别如下: URL使用相对路径,绝对路径比如http://localhost:5568/替换成I ...

  8. java:如何让程序按要求自行重启?

    正文开始前的废话: 这里的程序即包括b/s的web application,也包括standalone的类c/s的java application.   为什么要自我重启?   场景1:分布式环境中, ...

  9. Ionic实战四:ionic 即时通讯_ionic仿雅虎邮箱

    此产品是一款Ionic版微博.微信.朋友圈效果(微博.微信.聊天列表.聊天窗口.个人界面.编辑个人信息等)购买后二次开发方便快捷.    

  10. ASP.NT运行原理和页面生命周期详解及其应用

    ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用.  ...