py是源文件,pyc是源文件编译后的文件,pyo是源文件优化编译后的文件,pyd是其他语言写的python库

python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pyc和pyo本质上和py没有太大区别,只是对于这个模块的加载速度提高了,并没有提高代码的执行速度,通常情况下不用主动去编译pyc文件,文档上说只要调用了import model那么model.py就会先编译成pyc然后加载

1.如果需要特殊的单独编译,则只需要使用py_complie这个模块就行了,如下
import py_compile
py_compile.compile(r‘H:\game\test.py‘)

compile函数原型:
compile(file[, cfile[, dfile[, doraise]]])
file 表示需要编译的py文件的路径
cfile 表示编译后的pyc文件名称和路径,默认为直接在file文件名后加c 或者 o,o表示优化的字节码
dfile 错误消息保存的路径
doraise 可以是两个值,True或者False,如果为True,则会引发一个PyCompileError,否则如果编译文件出错,则会有一个错误,默认显示sys.stderr中,而不会引发异常

2.如果要把一个文件夹下的所有py文件都进行编译,则用下面的命令
import compileall
compileall.compile_dir(dirpath)
dirpath是我们要编译的文件夹的绝对路径

3.如果要编译pyo文件则
编译成 pyo 就是在控制台执行 python -O -m py_compile file.py
其中file.py就是我们要编译的源文件

主要O为大写


扩展名
在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名。下面是几种扩展名的用法。

py
py就是最基本的源码扩展名。windows下直接双击运行会调用python.exe执行。

pyw
pyw是另一种源码扩展名,跟py唯一的区别是在windows下双击pyw扩展名的源码会调用pythonw.exe执行源码,这种执行方式不会有命令行窗口。主要用于GUI程序发布时不需要看到控制台信息的情况。

pyc
在执行python代码时经常会看到同目录下自动生成同名的pyc文件。这是python源码编译后的字节码,一般会在代码执行时自动生成你代码中引用的py文件的pyc文件。这个文件可以直接执行,用文本编辑器打开也看不到源码。

pyo
pyo是跟pyc类似的优化编码后的文件。

pyd
pyd并非从python程序生成,而是其他语言写成的可以被python调用的扩展。

程序发布的选择
由于笔者基本只在windows平台下考虑发布问题,其他平台均使用源码,故此处讨论基本围绕windows平台。

打包为正常exe程序
如果要公开发布程序,最常见的方式就是打包成exe程序了。打包的好处是使用者不需要考虑Python的运行环境,且也容易被接受。但不好的是一般打包出来的程序都比较大,而且由于是依靠模块打包,有可能出现兼容性等问题。

笔者常用的打包模块是pyinstaller。常用的打包命令是:

pyinstaller -F example.py

-F参数可将代码打包成单个exe程序。

另外如果是GUI程序不需要控制台窗口的还可以加上-w参数:

pyinstaller -w -F example.py

发布编译后的pyc/pyo
如果使用者有python环境,又不想让他们看到源码,就可以选择发布pyc/pyo文件。

直接执行的py文件不会自动生成pyc,需要手动编译一下。单文件编译:

import py_compile
py_compile.compile(r’c:\test.py’)
1
2
文件夹编译:

import compileall
compileall.compile_dir(dirpath)
1
2
编译成pyo:

python -O -m py_compile file.py

如果是GUI程序不需要控制台窗口,可以新建一个pyw文件用于调用主pyc程序。pyw中只需要导入pyc程序即可。

发布源码py
发布源码一般是开源项目使用的,没什么需要说明的。直接发py文件就可以了,只要对方有环境就可以运行。

参考资料:

  1. 《python 文件 .py .pyc .pyw .pyo .pyd》
    http://blog.csdn.net/feeltouch/article/details/45952003
  2. 《Python程序的执行原理》http://tech.uc.cn/?p=1932
  3. 《python的pyc和pyo文件》http://gmingzhe.blog.51cto.com/810664/163444
  4. 《运行Python程序(pyc)隐藏DOS窗口的简便方法》
    https://apfantasy.wordpress.com/2011/02/13/%E8%BF%90%E8%A1%8Cpython%E7%A8%8B%E5%BA%8Fpyc%E9%9A%90%E8%97%8Fdos%E7%AA%97%E5%8F%A3%E7%9A%84%E7%AE%80%E4%BE%BF%E6%96%B9%E6%B3%95/
  5. 《py文件编译为pyc》http://blog.csdn.net/sislcb/article/details/4002414

python程序扩展名 py、pyc、pyo、pyd文件区别相关推荐

  1. python运行pyc和pyo文件_Python的py,pyc,pyo,pyd文件

    我们用python编写代码的时候,常常会遇到几个不同后缀的文件类型,有.py,有.pyc,有.pyo,有.pyd等.本文总结一下这几种后缀文件的区别: .py文件: 以.py扩展名的文件是源代码文件, ...

  2. python生成pyc_如何生成pyc/pyo/pyd文件

    # 一.如何生成pyc/pyo文件 # 1.通过编写代码生成 import py_compile # 参数如下 ''' def compile(file, cfile=None, dfile=None ...

  3. Python 程序扩展名(py, pyc, pyw, pyo, pyd) 及发布程序时的选择

    参考文章:Python 程序扩展名(py, pyc, pyw, pyo, pyd)及发布程序时的选择

  4. Python文件格式详解:py、pyc、pyo、pyd文件区别

    Python文件格式详解:py.pyc.pyo.pyd文件区别 Python是一种非常流行的编程语言,它具有简洁.易学.高效等优势,在各个领域得到了广泛的应用.而在Python编写程序时,我们会发现存 ...

  5. Python 常见文件格式 .py .pyc .pyw .pyo .pyd 之间的主要区别

    Python 常见文件格式 .py .pyc .pyw .pyo .pyd 之间的主要区别 Python 是一种面向对象.解释型计算机程序设计语言.Python 语法简洁.清晰,具有丰富和强大的类库. ...

  6. Python:打包生成.pyc、.pyd文件

    pyd文件是什么 pyd文件类似于DLL, 一般用C/C++语言编译而成, 可用作模块导入Python程序中. pyd文件仅适用于特定版本的Python, 不同版本间互不兼容, 如Python3.8不 ...

  7. 转:Python源代码编译成 pyc pyo

    [转] Python源代码编译成 pyc pyo 2011-02-28 17:23 [转] Python源代码编译成 pyc pyo 什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后, ...

  8. Python 程序扩展名(py, pyc, pyw, pyo, pyd)及发布程序时的选择

    扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py py就是最基本的源码扩展名.windows下直接双击运行会调用python.ex ...

  9. python 文件后缀名 .py .pyc .pyw .pyo .pyd

    pypypy 以 py 扩展名的文件是 Python 源码文件,由 python.exe 解释,可在控制台下运行.可用文本编辑器读写. pycpycpyc 以 pyc 为扩展名的是Python的编译文 ...

最新文章

  1. 基于Cobbler实现多版本系统批量部署
  2. ConcurrentHashMap总结
  3. 史上最强CP!程序猿+喵星人
  4. jsonp的原理·jsonp是不是ajax中实现跨域访问的技术
  5. System.Windows.Forms.Timer与System.Timers.Timer的区别
  6. 12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?
  7. ASP.NET之Ajax系列(三)
  8. 达内培训视频下载python
  9. 计算机系统动态库修复,电脑系统windows7出现无法定位动态链接库user32.dll错误提示解决措施...
  10. Python模拟QQ群发邮件
  11. 计算机房铺设防尘,机房装修施工方案机房防尘漆施工工艺.doc
  12. RS485通信----基本原理+电路图
  13. 【web视频资料百度云分享】
  14. 数据透视表怎么刷新数据_数据模型的Excel数据透视表刷新错误
  15. 山东师范大学计算机考研资料汇总
  16. 谷歌L3到L7扎堆升职,股票refresh多过别人年薪!
  17. 实木工程转计算机专业方法,现代实木椅的设计方法及计算机辅助设计探析
  18. 106@365大型互联网企业面试题整理amp;…
  19. 为什么团队执行力差,管理者应该如何解决?
  20. 互联网金融 面试 java_Java笔试题(互联网金融方向)

热门文章

  1. oracle form on query,OracleForm实战总结.doc
  2. 微信小程序原生的下拉框组件
  3. 服务网格——后 Kubernetes 时代的微服务(前言)
  4. omf多路径 oracle_ORACLE OMF
  5. 如何用计算机环境设计,计算机绘图软件在环境艺术设计中运用.doc
  6. IsFinite (m_CachedRange.first) IsFinite (m_CachedRange.second) 的解决参考
  7. 纯前端提示页面版本更新
  8. 安拆网分享:贝雷片贝雷架桁架的结构力学学问
  9. MFC DLL 不能正确调用的问题 + AFX_MANAGE_STATE(AfxGetStaticModuleState());
  10. IOS swift开发——获取设备定位信息