如何生成pyc/pyo/pyd文件
# 一.如何生成pyc/pyo文件 # 1.通过编写代码生成 import py_compile # 参数如下 ''' def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1): file:要编译的源文件 cfile:编译之后的pyc文件路径和文件名,默认直接在file后面加上c或者o(会保存在当前目录的__pycache__文件夹下), pyo相当于优化之后的pyc dfile:把在错误信息中显示的file用dfile替换 doraise:True或False,如果为True,那么文件编译出错的话,则会引发一个PyCompileError。 为False的话,编译出错会显示在sys.stderr中 optimize:用于编译的优化级别,有效的值为-1,0,1,2。-1表示当前解释器的优化级别 使用命令行的时候如果设置优化级别,通过-O来设置。用于生成pyo文件了。 说白了后面几个参数基本上用不到 ''' py_compile.compile("your_py_file") # 2.通过命令行生成 # python (-O) -m py_compile your_py_file.py ,加上-O表示优化 ''' 有的时候我们不想只编译一个py文件,而是编译一个文件夹下的所有py文件怎么办呢? python还为我们提供了一个模块 ''' import compileall # 参数如下 ''' def compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1): dir:文件夹路径 maxlevels:递归编译的的子目录的层数,默认是把10层子目录的py文件编译成pyc ddir:和上面的dfile类似 force:如果为True,将强制编译为pyc,即便现在pyc文件是最新的,依旧会编译一次 rx:一个正则表达式,可以排除掉不想编译的目录,只编译想要的目录 quiet:给我安静点,编译之后不会在标准输出中,打印信息 ''' compileall.compile_dir("your_dir") # 同样可以使用命令行 # python -m compileall your_dir
我们来编译一个试试
首先我在foo.py中定义了一个函数fuck,然后在bar.py中进行编译,这里就不使用命令行了,效果是一样的。
会发现在当前目录下的__pycache__目录中多出了一个文件,正是刚才对编译的字节码文件。我们把它移动到当前目录来,并把foo.py删除,并把名字改一下,否则无法导入
发现依旧执行成功了,py文件和pyc文件可以按照相同的方式导入
--------------------------------------------------------------------
然后直接执行python b.py build_ext --inplace即可
但是我们发现一个非常恶心的地方,那就是缺少vcvarsall.bat,但这不是我们的问题,是傻逼windows的问题,因为python一些依赖的模块会有c/c++扩展。
微软之前解决过一次,但是是针对于python2.7,python3.x我还不清楚。python3.x的解决的办法是安装vs,但我个人没有兴趣安装,写C我也只是用notepad++加上gcc。
不过我们可以在linux上进行测试,反正代码不需要改。
进行编译
可以看到,多出了这么几个文件,其他的无所谓,关键是这个.so(共享库)文件。在windows上是.dll(应用程序扩展)文件.
之前不是说编译pyd文件吗?以Windows为例,pyd是C编写的模块,可以直接通过import导入,python调用dll需要ctypes。pyd的本质是dll。
如何生成pyc/pyo/pyd文件的更多相关文章
- Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别
Python是一种面向对象.解释型计算机程序设计语言.Python 语法简洁.清晰,具有丰富和强大的类库.Python源代码遵循 GPL (GNU General Public License) 协议 ...
- pyx文件 生成pyd 文件用于 cython调用
转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...
- python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用
python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...
- Python是解释性语言吗? 直到看到有 python py、pyc、pyo、pyd 文件
py是源文件,pyc是源文件编译后的文件,pyo是源文件优化编译后的文件,pyd是其他语言写的python库 1. Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去, ...
- windows平台 python生成 pyd文件
Python的文件类型介绍: .py python的源代码文件 .pyc Python源代码import后,编译生成的字节码 .pyo Python源代码编译优化生成的字节 ...
- Python生成pyd文件
Python的脚本文件是开源的,量化策略的安全性没有保障.因此需要保护源码.那么要对Python代码进行混淆.加密保护. 混淆代码,我准备使用pyminifier.而加密处理,就比较麻烦. Pytho ...
- Python各种扩展名(py, pyc, pyw, pyo, pyd)区别
扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py py就是最基本的源码扩展名 pyw pyw是另一种源码扩展名,跟py唯一的区别是 ...
- python .py .pyc .pyw .pyo .pyd区别
.py 文件 以 .py 作扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行.当然,也可用文本编辑器进行修改. .pyc 文件 以 .pyc 作扩展名的文件是 ...
- python 生成 pyc 文件
以 pyc 为扩展名的是Python的编译文件.其执行速度快于 py 文件且不能用文本编辑编辑查看.所以 pyc 文件往往代替 py 文件发布. Python 在执行时,首先会将 py 文件中的源代码 ...
随机推荐
- 局部敏感哈希LSH
之前介绍了Annoy,Annoy是一种高维空间寻找近似最近邻的算法(ANN)的一种,接下来再讨论一种ANN算法,LSH局部敏感哈希. LSH的基本思想是: 原始空间中相邻的数据点通过映射或投影变换后, ...
- PAT——乙级1022:D进制的A+B &乙级1037:在霍格沃茨找零钱
1022 D进制的A+B (20 point(s)) 输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依 ...
- HDU 4745 Two Rabbits(最长回文子序列)(2013 ACM/ICPC Asia Regional Hangzhou Online)
Description Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon ...
- [GitHub] - Unity Timer
https://github.com/akbiggs/UnityTimer#unity-timer Run actions after a delay in Unity3D. This library ...
- about !dbgprint to analyze BSOD dump file.
基本规则: 只有debug mode enable的机器,产生的dump file才会保存dbgprint的buffer. 默认!dbgprint的buffer size是4k. 增加buffer s ...
- To Chromium之浏览器外框UI(2)
之前一些文章本来是草稿状态,一次性全release出来了,排版上可能看上去不太舒服,等哪一天研究下改改排版. Here继续chromium的UI,看看,浏览器的外壳是怎么被画出来的:) 可以先关注下几 ...
- Redis能做什么?不能做什么?
https://blog.csdn.net/u014229282/article/details/81174202 最近阅读了<redis设计与实现>,这是一本比较枯燥的书,毕竟涉及到re ...
- LevelDB速记
LevelDb的基本结构如下: 由六大部分组成: 一.MemTable,用户写入和读取的直接对象, 二.Immutable MemTable,用户状态写入的对象写满的MemTable之后会转为Immu ...
- Android 实现异步加载图片
麦洛开通博客以来,有一段时间没有更新博文了.主要是麦洛这段时间因项目开发实在太忙了.今天周六还在公司加班,苦逼程序猿都是这样生活的. 今天在做项目的时候,有一个实现异步加载图片的功能,虽然比较简单但还 ...
- Spring之JDBC
jdbc.properties driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ssi?useUnicode ...