本系列文章第二篇主要说明windows环境的编译环境搭建以及编译过程。

编译环境选择:

1.选用作神一样存在的Microsoft Visual C++ Compiler for Python 2.7为编译器使用。不选用vs的原因在于vs过于庞大不太适合我这种喜欢小而全的思想。这里也没有选择Announcing Visual C++ Build Tools 2015作为编译环境因为这个东东没有离线安装包,在很多地方没有离线安装方式就可以说根本无法使用。

2.使用vcbuild方式进行编译。这里没有选择msbuild进行编译是因为神一样存在的Microsoft Visual C++ Compiler for Python 2.7是vs2008的精简版,在2008中还没有讲vcbuild换成msbuild方式。这两种方式都是比较不错的方式,只不过上面没有选用vs2015的精简版(Announcing Visual C++ Build Tools 2015)所以无法选用msbuil而已。

3.选用命令行方式进行编译,也算是一个挑战。因为在大家的概念中在windows上编译的东东都必须使用vs的界面进行,网络上这方面的资料也比较少。所以,这里当作一个挑战进行。不过在使用命令行编译的过程中发现vs的整套编译环境比较全面而且灵活性很高,这里给vs命令行编译过程点个赞。

环境搭建:

0.操作系统为win10 64位系统,python源码版本选用当前最新版本2.7.11。

1.下载并安装神一样存在的Microsoft Visual C++ Compiler for Python 2.7,添加INCLUDE和LIBPATH到环境变量中。

2.下载并安装Microsoft Visual C++ 2008 Redistributable Package (x64)Microsoft Visual C++ 2008 Redistributable Package (x86)

3.下载并安装ActivePerl,并检查环境变量是否生效。

4.下载并安装NASM

5.下载SQLite 3.6.21,并将sqlite源代码解压到python源代码目录下的externals目录下。

6.下载bzip2-1.0.6.tar.gz。并将bz源代码解压到python源代码目录下的externals目录下。

7.下载openssl-1.0.2d.tar.gz。并将openssl源代码解压到python源代码目录下的externals目录下。

其上,每一个东东意义分别为:1,2为基础编译环境。3,4为openssl在windows上编译所必须的。5,6,7为python的相关开源项目。

编译过程:

0.先开始,可以从pcbuild目录下找到readme.txt从中可以看到

 Quick Start Guide
----------------- . Install Microsoft Visual Studio , any edition.
. Install Microsoft Visual Studio , any edition, or Windows SDK 7.1
and any version of Microsoft Visual Studio newer than .
. Install Subversion, and make sure 'svn.exe' is on your PATH.
. Run "build.bat -e" to build Python in -bit Release configuration.
. (Optional, but recommended) Run the test suite with "rt.bat -q".

可以看到最新的python源代码支持vs2010进行编译。另外还能看到:

Legacy support
-------------- You can find build directories for older versions of Visual Studio and
Visual C++ in the PC directory. The project files in PC/VS9./ are
specific to Visual Studio , and will be fully supported for the life
of Python 2.7. The following legacy build directories are no longer maintained and may
not work out of the box. PC/VC6/
Visual C++ 6.0
PC/VS7./
Visual Studio (7.1)
PC/VS8./
Visual Studio (8.0)

这里可以看到vs2008是一个现在还支持,但是在pc/vs9.0目录下。

2.到pc/readme.txt中可以得到编译过程基本是从build.bat开始的。所以到pc/vs9.0下直接查找build.bat。打开build.bat可以看到这是一个比较简单的脚本,按照参数进行填写参数,调用build.bat基本就可以了。

3.代码Visual C++ 2008 64-bit Command Prompt,切换到python代码目录的pc/vs9.0下。执行

build.bat -c Release -p x64 -t Rebuild

直接报错,提示找不到cl命令,和目标是64位,编译出来是32位。解决办法:

build.bat -c Release -p x64 -t Rebuild /useenv /logcommands /platform:x64

添加了后面的三个参数,这三个参数是vcbuid的参数,参数意义详见:VCBUILD 选项

最终build.bat脚本解释出:

vcbuild "D:\\Python-2.7.11\PC\VS9.0\pcbuild.sln" /rebuild "Release|x64" /useenv /logcommands /platform:x64

4.删除我们不需要的子项目:

从pcbuild.sln中可以可以看到有_ctypes,_ctypes_test,_elementtree,_hashlib,_msi,_multiprocessing,_socket,_testcapi,pyexpat,select,unicodedata,winsound,_bsddb,_bz2,_ssl,_sqlite3,_tkinter,w9xpopen

在上篇文章中说到需求不使用tk讲tk删除。bsddb比较古老的db标准,现在估计没人使用也删了。_ssl,_hashlib都是用openssl,在windows编译openssl比较麻烦暂时删除,之后搞定openssl的windows编译之后再添加进来。w9xpopen是win9X的环境支持,也删掉。

5.使用上面的编译命令进行编译:

发现仍有编译不过问题,提示编译dll时找不到入口函数。调查后发现链接dll时缺少参数/dll,详情参见:Linker Options

根据这个调查发现vcproj中的Configuration中配置的ConfigurationTypes Enumeration正确。但是依然不添加/dll参数,查找VCLinkerTool的标签属性发现缺少LinkDLL参数,添加后编译常常。

6.编译结果:

编译出python.exe,pythonw.exe,python27.dll等等,双击python.exe:

Python 2.7. (default, Feb   , ::) [MSC v.  bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.>>> import os
>>> print os
<module 'os' from 'D:\\Python-2.7.11\lib\os.pyc'>
>>>

可以执行。下一篇文章会详细介绍编译目录下编译出的文件的意义,以及进一步的添加win api相关。

参考文献:

https://docs.python.org/2/using/windows.html

Building C++ Projects in Visual Studio

https://msdn.microsoft.com/en-us/library/7s88b19e(v=vs.90).aspx

C/C++ Building Reference

https://msdn.microsoft.com/en-us/library/91621w01.aspx

Solutions and Projects in Visual Studio

https://msdn.microsoft.com/en-us/library/b142f8e7.aspx

Solution (.Sln) File

https://msdn.microsoft.com/en-us/library/bb165951(v=VS.90).aspx

Extending Solution Explorer

https://msdn.microsoft.com/en-us/library/bb166499(v=vs.90).aspx

Property Inheritance

https://msdn.microsoft.com/en-us/library/tybz7dex(v=vs.90).aspx

Project Files

https://msdn.microsoft.com/en-us/library/2208a1f2(v=vs.90).aspx


关于VCPROJ文件的说明

http://blog.sina.com.cn/s/blog_6288219501011nib.html

VCProject Properties

https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.vcproject_properties(v=vs.90).aspx

Visual C++ Project Model

https://msdn.microsoft.com/en-us/library/2eydyk57(v=vs.90).aspx

Visual C++ Code Model

https://msdn.microsoft.com/en-us/library/t41260xs(v=vs.90).aspx

Microsoft.VisualStudio.VCProjectEngine Namespace

https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine(v=vs.90).aspx

ConfigurationTypes Enumeration

https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.configurationtypes(v=vs.90).aspx

VCLinkerTool Members

https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vcprojectengine.vclinkertool_members(v=vs.90).aspx

VCBUILD 选项

https://msdn.microsoft.com/zh-cn/library/cz553aa1(VS.80).aspx

Linker Options

https://msdn.microsoft.com/en-us/library/y0zzbyt4(v=vs.90).aspx

RegOpenKey function

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724895(v=vs.85).aspx

自发行python版本制作(二)编译的更多相关文章

  1. 自发行python版本制作(一)

    最近使用python开发一些小玩意,发现python实在很符合我的理念:轻量级,功能强大,开放. python是一种脚本语言,不像java那样需要沉重的编译过程.这使得python更显得轻巧灵便,可以 ...

  2. 利用Python制作二维码

    利用简单的Python代码制作二维码 一.制作工具 安装Python环境 + PyCharm编译器. 二.电脑系统 本人win10 + Python3.7.0 + PyCharm. 三.写代码前先下载 ...

  3. Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)

    大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...

  4. Linux——Django 开发环境部署(二)python版本控制器pyenv

    python版本控制器pyenv 之前的 那篇是说明了django环境的site package完全独立出来了,但是使用的python解释器还是系统的,为了继续独立出来,甚至是达到ruby的rvm的自 ...

  5. pycharm下的多个python版本共存(二)

    上一篇博文介绍了在windows下同时安装python2和python3.而在工作的过程中,我习惯于用pycharm作为IDE.本文将记录如何在pycharm中选择python版本,并给相应的版本安装 ...

  6. Python 基础【二】 上

    一.python语言分类 1. C python   c语言的python版本 官方推荐 使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行 ...

  7. Liunx系统升级自带的Python版本

    一.查看系统信息 [root@localhost ~]# cat /etc/redhat-release CentOS release 6.4 (Final) [root@localhost ~]# ...

  8. python基础介绍二

    一.python种类 1.1 Cpython python官方版本,使用c语言实现,运行机制:先编译,py(源码文件)->pyc(字节码文件),最终执行时先将字节码转换成机器码,然后交给cpu执 ...

  9. conda 管理 python 版本

    conda常用命令 查看当前系统下的环境 conda info -e 创建新的环境 # 指定python版本为2.7 conda create -n env_name python=2.7 # 同时安 ...

随机推荐

  1. robot创建桌面图标(转载)

    桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...

  2. MyBatis学习总结(三)——优化MyBatis配置文件中的配置(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013548.html 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置 ...

  3. 代码阅读分析工具Understand 2.0试用

    Understand 2.0是一款源代码阅读分析软件,功能强大.试用过一段时间后,感觉相当不错,确实可以大大提高代码阅读效率.由于Understand功能十分强大,本文不可能详尽地介绍它的所有功能,所 ...

  4. mongodb数据库迁移

    如果遇到权限问题,终极解决办法:关掉权限! 如:assertion: 18 { ok: 0.0, errmsg: "auth failed", code: 18 }等错误

  5. 静态工厂方法VS构造器

    我之前已经介绍过关于构建者模式(Builder Pattern)的一些内容,它是一种很有用的模式用于实例化包含几个属性(可选的)的类,带来的好处是更容易读.写及维护客户端代码.今天,我将继续介绍对象创 ...

  6. 使用Jmeter监测服务器cpu、内存等性能

    jmeter中可以监控服务器的CPU和内存使用情况,但是需要安装一些插件还需要在被监测服务器上开启服务. 1.下载JMeterPlugins-Standard-1.4.0.zip插件.下载后将JMet ...

  7. Golang Import使用入门

    我们在写Go代码的时候经常用到import这个命令用来导入包文件,而我们经常看到的方式参考如下: import( "fmt" ) 然后我们代码里面可以通过如下的方式调用 fmt.P ...

  8. 使用CLion编辑C工程

    最近正在研究Linux C代码编辑器,确实也不太喜欢SI(Windows看代码还行,编辑一般,同步麻烦), 尝试使用CLion,但对makefile工程支持不好,怎么编译还没搞懂, 阅读.编辑还不错, ...

  9. centos 安装redis并加入系统服务

    1.安装redis wget http://download.redis.io/releases/redis-3.2.5.tar.gz 解压:tar -zxvf redis-3.2.5.tar.gz ...

  10. SecureCRT连接VirtualBox下的ubuntu以及NMP的搭建与通过宿主机访问该NGINX服务器过程

    一直使用wamp作为开发环境,只是工作中时常会遇到在wamp下没问题但是提交到服务器生产环境会出现一些意想不到的情况,由此萌生了在本机搭建LNMP环境的想法,我个人不知道其他人的虚拟机搭建服务器环境是 ...