Python的几种文件类型

python文件:py,ipynb, pyi, pyc, pyd, pyo都是什么文件? py文件是 Python 最基本的源代码文件格式,用于存储纯文本形式的 Python 代码。它是开发者编写程序的主要场所,包含函数、类、变量定义以及执行逻辑。Python 解释器直接读取并执行.py文件中的指令。例如 ,创建一个简单的hello.py")探索Python编程的多面性,从基础的.py源代码到交互式的.ipynb笔记,再到高效的.pyi类型提示文件,本文深入解析了Python文件的类型与应用。 阅读详情
AI摘要

本文介绍了Python的各种文件类型,包括py、pyw、pyx、pyc、pyo和pyd,并详细讲解了如何使用py_compile模块将.py文件编译为pyc和pyo字节码文件,以及如何通过Cython和distutils将Python代码编译为更安全的pyd扩展模块。

Python的几种文件类型

Python有以下几种类型的文件:

  • py:Python控制台程序的源代码文件
  • pyw:Python带用户界面的源代码文件
  • pyx:Python包源文件
  • pyc:Python字节码文件
  • pyo:Python优化后的字节码文件
  • pyd:Python的库文件(Python版DLL)、在Linux上是so文件

pyc和pyo的生成方法

pyc的作用是用来跨平台使用的,和Java中的Class文件类似。pyc文件是一种字节码文件,可以加快Python解释器的加载速度,当然也可以用来做简单的防源码泄露保护。

pyo则是优化过后的字节码文件,不过pyo更像编译型语言里的中间文件。

我们可以通过Python提供的py_compile模块来进行源代码的编译。

py_compile模块只提供3个方法,分别是有关编译异常PyCompileError、有关编译compile、有关程序入口main

我们要用到的是compile方法,compile原形如下:

compile(file, cfile=None, dfile=None, doraise=False, optimize=-1)

有5个参数:

  1. file:必选参数,要编译的源文件
  2. cfile:编译后的文件,默认在源文件目录下的__pycache__/源文件名.解释器类型-python版本.字节码类型 ###例如:__pycache__/abc.cpython-34.pyo
  3. dfile:错误消息文件,默认和cfile一样
  4. doraise:是否开启异常处理,默认False
  5. optimize:优化字节码级别

这里分为4个等级,文档中是这样写的:

optimize级别

param optimize: The optimization level for the compiler. Valid values are -1, 0, 1 and 2. A value of -1 means to use the optimization level of the current interpreter, as given by -O command line options.

optimize为1时,优化字节码级别为最高

-1和0:设置pyc优化级别

1和2:设置pyo优化级别

数字越小,优化级别越高

准备源文件a.py和b.py,内容相同,就是一句print("python")代码

编写编译脚本:

import py_compile

py_compile.compile(file = "a.py",cfile = "a.pyc",optimize=-1)

py_compile.compile(file = "b.py",cfile = "b.pyo",optimize=1)

编译脚本代码

运行后可以看到已经成功编译成字节码文件了,分别为a.pyc和b.pyo

用文本编辑器打开a.pyc和b.pyo,如图

打开字节码文件,尝试运行这2个字节码文件。

运行效果

可见,字节码文件成功运行。

也可以直接通过Python加载模块来运行:

#编译成pyc

python -m py_compile 源代码

#编译成pyo

python -O -m py_compile 源代码

这确实可以简单地保护我们的代码,同时似乎看起来像是加密的效果,但是要注意,这不是加密,只是把源码变成优化后的字节码而已,如果想要获得源码,我们一样可以通过逆向编译来得到源码,目前有专门逆向Python字节码的工具存在。

如果需要编译整个目录内的所有源代码,请参考Python compileall

pyd可以让我们的代码更安全

如果真的想要保护代码,为何不考虑把它变成python扩展模块?(目前还没有pyd被反编译的消息)

pyd是Python中的扩展模块,相当于windows的dll,不同的是pyd只供python调用而已。

实际上,大部分的包、小模块都是以pyd形式发布的。

如果特别感兴趣的小伙伴可以深入研究下setuptools和distutils

在把源代码转换成功pyd之前,我们需要用到Cython包。

pip list | findstr "Cython"

检查Cython包

检查是否安装了Cython,没有请pip install Cython安装即可

编译pyd步骤1:生成C代码

import Cython.Build

#导入Build模块

Cython.Build.cythonize("a.py")

#a.py转换成C代码

cythonize运行完成之后,无异常的情况下会在a.py的目录下创建一个a.c文件,同时会返回一个distutils.extension.Extension对象列表

一定要注意的是:如果在Python Shell测试,一定要用绝对路径,否则会ValueError异常,cythonize不会从sys.path中读路径。

编译pyd步骤2:利用distutils生成pyd扩展模块

此时我们可以用distutils包来编译成我们要的pyd模块

编译a.py成pyd

import Cython.Build

import distutils.core

a = Cython.Build.cythonize("a.py")

#返回distutils.extension.Extension对象列表

distutils.core.setup(

name = 'pyd的编译',#包名称

version = "1.0",#包版本号

ext_modules= a,#扩展模块

author = "百家号——斌哥说Python",#作者

author_email='binnlzeng@163.com'#作者邮箱

)

代码

python 执行编译的脚本 build

或

python 执行编译的脚本 build_ext

执行编译脚本编译

此时会在编译脚本所在目录生成一个build目录,里面存着C语言的.def文件和.o文件,还有我们要的pyd文件

生成的C文件

生成的pyd文件

批量编译pyd文件的误区

此时我们已经生成了1个pyd文件,如果我们是扩展包/模块的开发者,怎么批量编译呢?

总有人会犯错,例如以下2个例子:

a = Cython.Build.cythonize("a.py")

b = Cython.Build.cythonize("b.py")

distutils.core.setup(

...,

ext_modules= [a,b]

)

这样做吗?NO......

a = Cython.Build.cythonize("a.py")

a.append(Cython.Build.cythonize("b.py"))

distutils.core.setup(

...,

ext_modules= a

)

还是这样?

犯这样的错原因却是因为:

a = Cython.Build.cythonize("a.py")

type(a)

提示<class 'list'>

没错,Cython.Build.cythonize返回的是一个列表,里面有只有1个distutils.extension.Extension对象

报错如下:

异常信息

需要1个Extension或者是2个元组

批量编译pyd

方法1:提取我们要的Extension对象

import Cython.Build

import distutils.core

a = Cython.Build.cythonize("a.py")[0] #提取Extension对象

b = Cython.Build.cythonize("b.py")[0]

distutils.core.setup(

name = 'pyd的编译', #包名称

version = "1.0", #包版本号

ext_modules= [a,b], #被扩展的模块

author = "百家号——斌哥说Python", #作者

author_email='binnlzeng@163.com' #作者邮箱

)

方法2:转换成C代码后再进行Extension对象实例化

import Cython.Build

import distutils.core

Cython.Build.cythonize("a.py")

Cython.Build.cythonize("b.py")

distutils.core.setup(

name = 'pyd的编译', #包名称

version = "1.0", #包版本号

ext_modules= [distutils.core.Extension('a',["a.c"]),distutils.core.Extension('b', ['b.c'])], #被扩展的模块

#[

#distutils.core.Extension('a',["a.c"]),

#distutils.core.Extension('b', ['b.c'])

#]

author = "百家号——斌哥说Python", #作者

author_email='binnlzeng@163.com' #作者邮箱

)

pyc和pyo相对而言安全性较低,pyd是目前解决Python开发中代码安全性最优的一个方案。

但是要注意一点:无论是pyc还是pyo、pyd,都是跟着Python版本走的,不要指望Python2.7的东西在Python3上完美运行。

PS:如果遇到running build...提示,删掉build目录重新编译即可。

python的神奇功能二、源码打包 「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」 源码打包~wheel方式 python的wheel介绍 wheel是python中的一个打包方式,它可以为你软件的依赖库或依赖软件提供打包,它打包的依赖包可以在每次使用都可以很方便的安装而不需要再次编译。 wheel的官方文档是wheel.readthedocs.io/en/latest/。 在它的使用过程中,有2个限制的地方: 1.提供给“setuptools”中的“bdist_wheel”命令的实现必须是“setuptool 阅读详情

相关推荐

Python文件类型大全:从.py到.pyd,你见过几种?

Python生态中的多种文件类型及其用途解析 本文系统梳理了Python开发中常见的文件类型及其功能。主要内容包括: 核心文件类型:.py(源代码)、.pyc(字节码)、.pyd(Windows动态库)、.so(Linux/Mac动态库)、.pyw(无控制台脚本)等 包与分发文件:init.py、main.py、.whl、.egg等包管理相关文件 配置文件:pyproject.toml、setup.cfg、requirements.txt等项目的配置文件 特殊用途文件:.pyi(类型提示存根文件)、.pth

weixin_42321517的博客 930

【Python小技巧】.py .pyd .pyw 都是干什么用文件?想分发时加密py脚本文件?

学习Python有一段时间了, 但Python的文件格式你都了解么?他们的运行机制有哪些区别?扩展名为 .py 的文件包含 Python 源代码。这是Python语言脚本文件最常用的格式,文件明文展示代码。Python 语言如今已成为非常著名的语言。它可用于系统脚本、网络和软件开发以及数学。Python支持跨平台兼容;意味着用 Python 开发的应用程序可以在不同的平台上运行,如 Windows、MAC、Linux、Raspberry Pi 等。Python 提供了一种类似于英语的简单易读的语法。

IT里的交易员-博客 1万+

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

pyc文件是Python编译过的字节码文件,是将.py文件编译后生成的文件,也就是说,pyc文件是由Python编译器生成的一种中间文件,它会保存编译后的字节码,以便下次直接使用而无需再次编译。pyo文件也是Python编译过的字节码文件,与pyc文件类似,不同的是它是采用优化方式编译生成的,可以运行在Python的优化模式下,可以提高程序的运行效率。py、pyc、pyo、pyd这几种文件格式都有各自的特点和用途,当我们进行Python开发时,需要根据实际情况选择合适的文件格式。下面我们就来一一介绍。

. 8008

【Python】一文详细介绍 py格式 文件

📚【Python】一文带你解锁py格式文件奥秘🔓 💻详解py文件创建与编辑技巧,轻松上手Python编程!🖋️ 🔧掌握py文件运行方法,让代码飞起来!🚀 📖深入剖析py文件结构与语法,夯实编程基础!📚 🔍探索py文件在数据分析、机器学习等领域的应用,发现无限可能!🔬 🚀优化py文件性能,调试技巧助你成为编程高手!🛠️ 🎓总结与展望,让你在Python编程路上越走越远!🌈 #Python编程 #py格式文件 #文件创建与编辑 #文件运行 #文件结构与语法 #文件应用

创作高质量博文,分享知识,共同进步! 1万+

python实现RsaWithSHA256签名以及国密Sm3WithSm2签名

【代码】python实现RsaWithSHA256签名以及国密Sm3WithSm2签名。

weixin_45005677的博客 3352

Calibre PEX提取HSPICE网表时如何避免‘net 0‘错误?实测解决方案分享

本文详细解析了Calibre PEX提取HSPICE网表时出现的'net 0'错误,提供了从规则文件修改到网表后处理的四步解决方案。通过实战案例和进阶调试技巧,帮助工程师有效避免节点映射错误,确保后仿真精度。特别针对SPICE netlist生成机制提出了优化建议。

weixin_29279153的博客 385

Python文件类型大全:从.py到.pyd,你见过几种

开发阶段:主要使用.py.pyx运行阶段:涉及.pyc.pyd.so分发阶段:使用.whl.egg配置管理:各种配置文件掌握这些文件类型的特点和用途,能够帮助你更好地组织项目、优化性能和管理依赖。

2501_93950931的博客 779

BEVFormer详解

BEVFormer 是将Transformer架构的自注意机制与BEV视图中3D检测结合起来的一种纯视觉目标检测方案。对于纯视觉的BEV检测方案,其中的重中之重就是如何将2D的图像特征映射到3D空间的BEV栅格,既然是映射关系,那就有前行投影和反向查询两种机制。前向投影是基于深度估计的方法,参考基于深度估计的BEV视图转换方法,典型代表为LSS。反向查询方法思路为先将BEV栅格在Z方向上进行lift提升,然后再映射到图像特征图上进行特征查询。BEVFormer 就是基于这种机制进行2D图像特征到3D空间的B

MAX的专栏 4744

python有哪几种文件类型_以下哪种文件类型不是用户可以创建的文件类型(      )...

【填空题】formal【填空题】foreigner【单选题】测量轴承振动常用的是速度传感器或 。【填空题】password【单选题】锁骨下静脉【填空题】cancer【单选题】在最高速运转中,主轴轴承达到稳定温度时,滑动轴承不能超过( )摄氏度。【单选题】研磨孔径时,有槽的研磨棒用于 。【填空题】comment【单选题】环境卫生工作中常见的二次污染物如( )【填空题】coun...

weixin_39796652的博客 578

某银行大数据分析平台之云原生架构

软考架构师论文

doudoudouy的博客 768

别再手动上传了!用宝塔面板的‘Let‘s Encrypt’免费SSL证书,3分钟自动续期

本文详细介绍了如何利用宝塔面板的‘Let‘s Encrypt’功能实现SSL证书的自动申请和续期,3分钟完成配置即可永久免费使用。通过对比不同SSL证书方案,突出Let's Encrypt的免费、自动续期和高安全性优势,特别适合个人博客和中小企业官网。

weixin_30415113的博客 150

Python 探测图片文件类型

探测图片类型 今天遇到一个小问题,如何探测图片的文件类型。总结如下: python magic magic 模块的github地址在这, 可以用来方便地探测文件类型,使用示例如下,可以方便地探测一个文件或是字节流文件。 >>> import magic >>> magic.from_file("te...

weixin_33753845的博客 293

【Java开发者必看】LangChain4j实战指南:使用AIService轻松集成聊天记忆Chat Memory到SpringBoot应用,通过封装多轮复杂对话,使聊天记忆的实现变得简单

聊天记忆是指在与用户的多轮对话过程中,能够记住之前的交互内容,从而提供更加连贯和个性化的回复。LangChain4j支持通过ChatMemoryProvider接口实现聊天记忆功能。

Spring Boot-Common On With You 448

python 文件类型

*.py文件是Python源程序代码文件; *.pyc文件是Python源程序文件(*.py)经编译后生成的字节码文件; *.pyo文件是Python源程序文件(*.py)经优化编译后生成的字节码文件; 从本质上讲,pyc文件和pyo文件之间没有太大区别,只是pyo文件模块的加载速度比pyc文件模块的加载速度高;从代码的运行速度上讲,pyo文件模块中代码的运行速度与pyc文件模块中代码的运行

Vein Cook 820

基于DNN神经网络的多输入多输出数据回归预测(附带Matlab代码)

假设我们的输入数据包含n个特征,输出数据包含m个特征。在本文中,我们将介绍如何使用DNN(深度神经网络)实现多输入多输出数据回归预测,并提供相应的Matlab代码。需要注意的是,上述代码中的DNN模型是一个简化的示例,您可以根据实际任务的复杂程度和要求进行相应的调整和优化。综上所述,我们介绍了如何使用DNN神经网络实现多输入多输出数据回归预测,并提供了相应的Matlab代码。函数对DNN模型进行训练,其中输入数据需要转置,以适应网络的输入要求。最后,我们使用训练好的模型对测试数据进行预测,并打印预测结果。

DevWizard的博客 1067

家用智能监控摄像机如何使用NAS进行存储/备份(小米智能摄像机如何解决群晖 / 飞牛 NAS 识别失败、文件目录不显示问题)

小米摄像头NAS存储总出问题?🤯 别慌!本文揭秘NAS底层逻辑,群晖、飞牛实战指南。手把手教你排查解决所有难题,轻松搞定监控录像安全备份!🔒

XiaoqiangClub的博客 2693

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python各文件类型对比: .py、.ipynb、.pyi、.pyc、.pyd

pyi文件:是Python类型提示文件的标准扩展名,用于提供Python代码中的类型信息,便于IDE或文本编辑器等工具提供代码补全、错误检查等功能。.pyd文件:是Windows平台上的Python动态链接库文件扩展名,其中包含已编译的Python代码,并且可以在不同的Python进程中共享使用。.pyc文件:是Python编译文件的标准扩展名,其中包含已编译的Python字节码文件,可以提高Python代码的执行速度。.py文件:是Python代码文件的标准扩展名,其中包含可执行的Python代码。

分享型博主 1792

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python的文件类型

Python的文件类型Python的文件类型主要分为3种,分别是源代码,字节代码和优化代码。这些代码都可以直接运行,不需要进行编译或者连接。1)        源代码Python源代码的文件以“py”为扩展名,由python.exe解释,可在控制台下运行。用Python语言写的程序不需要编译成二进制代码,可以直接运行源代码。“pyw”是程序开发图形用户接口(Graphical user

Lynn_yan的专栏 2487

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python中文件分类_Python中的文件类型

Python文件类型有3种:源代码文件、编译文件、优化文件。源代码文件:文件以“.py”结尾,为开发程序的代码保存的文件。编译文件:文件以”.pyc”结尾,假设源文件1.py,如果将1.py编译为1.pyc,则在2.py中输入以下代码:#!/usr/bin/python3import py_compilepy_compile.compile(‘1.py’)然后在命令行中:(3pyex) [root...

weixin_39665379的博客 553

python文件类型

python文件类型

m0_73837279的博客 505

python的文件可分为_Python 文件类型

标签:Python的文件类型分为以下几种:1. 源代码文件,也就是以 .py 为扩展名的文件,由 python 程序解释,不需要编译2. 字节代码文件,python 源代码文件经过编译后生成的扩展名为 .pyc 的文件3. 经过优化的源代码文件,扩展名为 .pyo如何将源代码文件编译成字节代码文件:[root@localhost ~]$ cat 1.py # 这里将2.py文件编译成字节...

weixin_36003005的博客 3452

python glob库,Python Glob多种文件类型

Is there a better way to use glob.glob in python to get a list of multiple file types such as .txt, .mdown, and .markdown? Right now I have something like this:projectFiles1 = glob.glob( os.path.join...

weixin_42332144的博客 829

python的文件类型

在开始之前,先简单说说python如何工作: 一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。 而Python语言写的程序不需要编译成二进制代码。你可以直接...

weixin_34208185的博客 276

python中如何区分文件类型_python准确判断文件类型

判断文件类型在开发中非常常见的需求,怎样才能准确的判断文件类型呢?首先大家想到的是文件的后缀,但是非常遗憾的是这种方法是非常不靠谱的,因为文件的后缀是可以随意更改的,而大家都知道后缀在linux系统下是没有这个概念的,所以仅靠判断后缀无法准确判断一个文件的类型。还有第二种方法是判断文件的头,每种文件在文件的头中会标识这种文件的类型,下面我们来看看如何用python来判断文件的类型。python通过...

weixin_39929721的博客 1092
上一篇: Python学习系列之可迭代对象,迭代器,生成器
下一篇: 编程语言:弱类型&强类型,动态类型&静态类型
answer3lin
博客等级 码龄11年 138粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值