Python的文件类型介绍:

.py       python的源代码文件

.pyc     Python源代码import后,编译生成的字节码

.pyo     Python源代码编译优化生成的字节码。pyo比pyc并没有优化多少,只是去掉了断言

.pyd     Python的动态链接库(Windows平台)

.py, .pyc, .pyo 运行速度几乎无差别,只是pyc, pyo文件加载的速度更快,不能用文本编辑器查看内容,反编译不太容易

本文的目标是将test.py文件生成test.c文件,然后将test.c文件作为Python源码的一部分,重新编译生成Python,使用时直接import test即可使用test模块。

Cython基本介绍:

文档中这样总结Cython:

Cython is an optimising static compiler for both the Python programming language and the extended Cython programming language (based on Pyrex). It makes writing C extensions for Python as easy as Python itself.

是一个Python编程语言的编译器,写C扩展就像写Python代码一样容易。

其最重要的功能是:

  • write Python code that calls back and forth from and to C or C++ code natively at any point.

即 将Python代码翻译为C代码。之后就可以像前面文章介绍的C语言扩展Python模块使用这些C代码了。

Cython基本用法:

在使用Cython编译Python代码时,务必要安装C/C++编译器,微软为Python提供了专用的编译器Microsoft Visual C++ Compiler for Python 2.7(包含32位和64位) 下载地址: http://aka.ms/vcpython27 百度云链接: https://pan.baidu.com/s/143jxjyQFtb_NCIWXt0DVWA 提取码: 5ick

1.下载完成并安装。以本机为例,安装完成后的路径为:

1
C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0

2.修改python代码

修改python安装目录下Lib\distutils\msvc9compiler.py文件(如有必要可能msvccompiler.py文件也需要做相应更改,视系统而定),找到get_build_version方法直接return 9.0

然后再找到find_vcvarsall方法直接返回vcvarsall.bat的路径(以自己机器安装后的路径为准)

例如  return r'C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat'

2. 安装Cython库

pip install Cython

3. 编写一个测试代码文件test.py放在D:/test/test.py

def say_hello():
print "hello world"

然后在同一目录下,新建一个setup.py文件,内容如下:

from distutils.core import setup
from Cython.Build import cythonize setup(ext_modules = cythonize("test.py"))

cythonize()是Cython提供将Python代码转换成C代码的API,

setup是Python提供的一种发布Python模块的方法。

4. 使用命令行编译Python代码:

3.上述完成之后就可以在windwos下正常编译python的C扩展。执行如下命令

1
python setup.py install

当然也可以建立一个windows的二进制包:

1
python setup.py bdist_wininst

当然也可以直接编译到当前目录:

1
python setup.py build_ext --inplace

build_ext是指明python生成C/C++的扩展模块(build C/C++ extensions (compile/link to build directory))

--inplace指示 将编译后的扩展模块直接放在与test.py同级的目录中。


参考资料:

https://www.cnblogs.com/jianmu/p/7497274.html?utm_source=debugrun&utm_medium=referral

http://www.cnblogs.com/lazyboy/p/4017567.html


windows平台 python生成 pyd文件的更多相关文章

  1. VNPY加密教程(Python生成pyd文件)

    安装成功之后,再修改设置.让Cython可以找到vcarsall.bat.此处有两种方案.(我采用方案1,亲测可用.方案2未测试,看似可用.) 方案1:修改Python安装目录的文件设置 window ...

  2. Python生成pyd文件

    Python的脚本文件是开源的,量化策略的安全性没有保障.因此需要保护源码.那么要对Python代码进行混淆.加密保护. 混淆代码,我准备使用pyminifier.而加密处理,就比较麻烦. Pytho ...

  3. Windows平台Python Pyramid实战从入门到进阶:第一个服务

    Pyramid是比较流行的Python Web 框架,比较灵活,功能也很强大.最近项目上用到,便打算学习一下.网上教程比较少,而且很多都是针对linux平台的,我是windows土著所以对那些linu ...

  4. Python生成pyc文件

    Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过python解释器最终会生成机器码运行.所以pyc文件是可以跨平台部署的,类似Java的.c ...

  5. windows平台python 2.7环境编译安装zbar

    最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图 ...

  6. pyx文件 生成pyd 文件用于 cython调用

    转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...

  7. 使用py2exe发布windows平台Python

    一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.py2ex ...

  8. 生成pyd文件时提示“Unable to find vcvarsall.bat”的问题

    本文内容 Unable to find vcvarsall.bat的问题描述 问题分析 总结 一.问题描述 我们在windows下通过pip安装一些外部Python 模块(比如,pycrypto)时通 ...

  9. windows下python调用c文件流程

    1.新建fun.c文件和fun.h文件 #include <stdio.h> #include <stdlib.h> #include <string.h> int ...

随机推荐

  1. Centos上传下载命令

    [root@localhost ~]# rz -bash: rz: command not found //安装下载上传插件 [root@localhost ~]# yum -y install lr ...

  2. Java课堂测试——一维数组

    题目: 一个典型的流程是: 2. 用户这时候有两个选择2.1  按 单步执行 键, 在 GUI 看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等. 最好用不同的 ...

  3. 爬虫---爬虫er与反爬虫er之间的斗争 转发

    转自:昵称:python修行路 https://www.cnblogs.com/zhaof/p/7326260.html

  4. 《linux就该这么学》第十四节课:第13章,部署DNS域名解析服务(bind服务)

    (借鉴请改动)  第十二章收尾  12.2.nfs网络文件系统 RHEL7默认安装了nfs,配置文件在  /etc/export  写入格式:共享目录    允许的客户端(参数)  ro        ...

  5. [assembly: AssemblyVersion("1.0.1.*")] 指定版本字符串不符合所需格式 - major[.minor[.build[.revision]]]

    报如下错误, 解决方法:打开项目文件,修改 打开项目文件修改:<Deterministic>true</Deterministic> 为:<Deterministic&g ...

  6. 对接 第三方物流APP 手机版

    昨天因为bibi项目要对接 物流信息 开始找了快递鸟文档,但是要填写申请APP,必须要注册公司才可以,这样非常麻烦.下面的第三方物理接口,绝对让你满意. https://m.kuaidi100.com ...

  7. spring源码解析1--spring整体架构

    一.Spring整体架构图 关于Spring的基本介绍就不再赘述了,先展示Spring框架的整体架构图如下示: 二.Spring结构介绍 Spring主要分为Core Container.Test.D ...

  8. mysql_study_5

    代码 mysql> CREATE TABLE shop ( ) UNSIGNED ZEROFILL ' NOT NULL, ) DEFAULT '' NOT NULL, ,) DEFAULT ' ...

  9. Weekly Contest 119

    第一题: 973. K Closest Points to Origin  We have a list of points on the plane.  Find the K closest poi ...

  10. js 手动插入meta标签和script标签

    // 插入 meta 标签 var oMeta = document.createElement('meta'); oMeta.content = 'width=device-width, initi ...