# 一.如何生成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文件的更多相关文章

  1. Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别

    Python是一种面向对象.解释型计算机程序设计语言.Python 语法简洁.清晰,具有丰富和强大的类库.Python源代码遵循 GPL (GNU General Public License) 协议 ...

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

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

  3. python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用

    python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...

  4. Python是解释性语言吗? 直到看到有 python py、pyc、pyo、pyd 文件

    py是源文件,pyc是源文件编译后的文件,pyo是源文件优化编译后的文件,pyd是其他语言写的python库 1. Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去, ...

  5. windows平台 python生成 pyd文件

    Python的文件类型介绍: .py       python的源代码文件 .pyc     Python源代码import后,编译生成的字节码 .pyo     Python源代码编译优化生成的字节 ...

  6. Python生成pyd文件

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

  7. Python各种扩展名(py, pyc, pyw, pyo, pyd)区别

    扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py py就是最基本的源码扩展名 pyw pyw是另一种源码扩展名,跟py唯一的区别是 ...

  8. python .py .pyc .pyw .pyo .pyd区别

    .py 文件 以 .py 作扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行.当然,也可用文本编辑器进行修改. .pyc 文件 以 .pyc 作扩展名的文件是 ...

  9. python 生成 pyc 文件

    以 pyc 为扩展名的是Python的编译文件.其执行速度快于 py 文件且不能用文本编辑编辑查看.所以 pyc 文件往往代替 py 文件发布. Python 在执行时,首先会将 py 文件中的源代码 ...

随机推荐

  1. Python第二天 (数据类型,变量 )

    1. 把任意数据类型赋值给变量 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如: 例子:a = 123 # a是整数 prin ...

  2. Python 进阶(一些进阶技巧)

    个人笔记,基本都摘抄自 Python3 官方文档 一. 上下文管理 1. 传统的类方式 Java 使用 try 来自动管理资源,只要实现了 AutoCloseable 接口,就可以部分摆脱手动 col ...

  3. 使用ListOperations操作redis

    使用ListOperations对象操作redis list: 方法 c参数 s说明   List<V> range(K key, long start, long end); K key ...

  4. 【iOS开发】动态添加子视图 UIView 的正确方法

    很多时候哥比较喜欢用代码添加视图,特别是要同时加很多UIView时,而且跟 xib 比起来代码更容易管理,在多人的项目中代码不容易 conflict. 但小牛哥最近发现很多新人都不太清楚正确的使用方法 ...

  5. 【Linux】使用 PXE+Kickstart 无人值守批量安装系统

    一.PXE背景知识 通过 PXE+DHCP+TFTP+VSftpd+Kickstart 服务程序搭建出无人值守安装系统,从而批量部署客户机系统. PXE(Preboot eXecute Environ ...

  6. 关于php网络爬虫phpspider

    前几天,被老板拉去说要我去抓取大众点评某家店的数据,当然被我义正言辞的拒绝了,理由是我不会...但我的反抗并没有什么卵用,所以还是乖乖去查资料,因为我是从事php工作的,首先找的就是php的网络爬虫源 ...

  7. Dubbo 项目与传统项目

    1.什么是传统工程 单工程 MVC 架构 控制层通过调用服务层完成业务逻辑处理 业务层调用持久层进程数据操作 2.什么是分布式工程 将传统项目的单工程结构,拆分成多工程 一般会有这几个工程: 父工程: ...

  8. BZOJ4444 SCOI2015国旗计划(贪心+倍增)

    链上问题是一个经典的贪心.于是考虑破环成链,将链倍长.求出每个线段右边能作为后继的最远线段,然后倍增即可. #include<iostream> #include<cstdio> ...

  9. WIN7服务优化,别关太多,小心启动不

    原文链接地址:http://blog.csdn.net/civilman/article/details/51423972 Adaptive brightness 监视周围的光线状况来调节屏幕明暗,如 ...

  10. 洛谷 [FJOI2014]最短路径树问题 解题报告

    [FJOI2014]最短路径树问题 题目描述 给一个包含\(n\)个点,\(m\)条边的无向连通图.从顶点\(1\)出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多 ...