0

0

Python 相关文件常见的后缀名详解[通俗易懂]

看不見的法師

看不見的法師

发布时间:2025-08-29 08:22:29

|

943人浏览过

|

来源于php中文网

原创

大家好,很高兴再次与大家见面,我是全栈君。

Python 文件常见的后缀名包括:

py
pyc
pyo
pyi
pyw
pyd
pyx
等。本文将重点介绍其中较为常见的几种后缀名。至于一些较为冷门的文件格式,如
pyz
pywz
rpy
pyde
pyp
pyt
等,由于资料稀少,网上相关文章大多来源相同且内容简略,因此本文不作深入探讨。

py
是最常见的 Python 源代码文件。

实际上,如果使用

python + 文件
的方式运行代码,只要文件内容相同,后缀名并不重要。以下运行结果是等价的:

python test.pypython test.txtpython test

pyc
是常见的 Python 字节码缓存文件。

立即学习Python免费学习笔记(深入)”;

pyc
文件和
py
文件一样可以直接执行,以下运行结果是等价的:

python test.pypython test.pyc

pyc
文件有两个主要作用:

作用一:提升加载性能。当 Python 代码执行时,首先由 Python 解析器翻译成 PyCodeObject 对象(字节码),然后由 Python 解释器执行。每次运行程序时,翻译后的字节码保存在内存中,程序结束后即消失。为了提高加载效率,Python 会在程序结束后将每个文件的字节码写入硬盘,保存为

xxx.pyc
文件。这样,下次执行该程序时,如果目录中有对应的
xxx.pyc
文件且修改时间与
xxx.py
文件一致,就可以直接读取
xxx.pyc
文件执行,而无需再次翻译成字节码。尽管这种缓存方式对性能提升的效果有限,但在大型项目中效果显著。

默认情况下,并不是所有的

py
文件都会自动生成
pyc
文件,只有被其他文件 import 的文件才会生成对应的
pyc
文件。可以通过一个简单的实验来验证:新建两个 Python 文件
hello.py
import.py
,内容如下:

# hello.pyprint("hello")
# import.pyimport hello

直接运行

python hello.py
不会生成
pyc
文件,而运行
python import.py
会在当前目录下生成
hello.py
对应的
pyc
文件。

Python2 和 Python3 在生成

pyc
文件时有所不同:Python2 会在当前目录下生成同名的
pyc
文件,而 Python3 会在当前目录下创建
__pycache__
文件夹,并在其中生成包含 Python 版本信息的
xxx.cpython-37.pyc
文件。

Python2

Python 相关文件常见的后缀名详解[通俗易懂]

Python3

Python 相关文件常见的后缀名详解[通俗易懂]

作用二:隐藏源代码。

pyc
格式是为解释器设计的二进制文件,直接用编辑器打开会显示乱码。将 Python 代码编译成
pyc
文件后再交付使用,可以在一定程度上隐藏源代码。

默认情况下,主文件不会生成

pyc
文件,但可以通过 Python 自带的
py_compile
compileall
库,手动将所有
py
文件编译成
pyc
文件。

python -m py_compile *.pypython -m compileall *.py

Python2

Python 相关文件常见的后缀名详解[通俗易懂]

Python3

Python 相关文件常见的后缀名详解[通俗易懂]

反编译

pyc
文件。虽然
pyc
文件可以一定程度上隐藏源代码,但可以通过反编译工具恢复源码。
uncompyle6
是一个专门用于将
pyc
文件反编译为
py
源码的第三方库,安装方式如下:

pip install uncompyle6

执行以下命令可以将生成的

pyc
文件反编译为
py
文件:

uncompyle6 -o . *.pyc

Python 相关文件常见的后缀名详解[通俗易懂]

打开生成的文件

hello.cpython-37.py
import.cpython-37.py
,可以看到与之前的
py
代码内容完全相同,只是多了一些 Python 版本信息。

Python 相关文件常见的后缀名详解[通俗易懂]

要了解更多关于防止反编译的技术,请参考文章:通过字节码混淆来保护Python代码。

pyo
是优化后的 Python 字节码缓存文件。

pyo
文件的作用与
pyc
文件相似,唯一的区别
pyo
文件去除了断言语句(
assert
语句)。可以使用
py_compile
compileall
库将示例文件编译成
pyo
文件,只需添加
-O
参数,运行结果没有任何变化:

python -O -m py_compile *.pypython -O -m compileall *.py

Python 相关文件常见的后缀名详解[通俗易懂]

从 Python3.5 开始,Python 只使用

pyc
文件,不再使用
pyo
文件。因此,以下命令无法生成
pyo
文件,生成的依然是
pyc
文件:

python3 -O -m py_compile *.pypython3 -O -m compileall *.py

Python 相关文件常见的后缀名详解[通俗易懂]

pyi
是 Python 的存根文件,用于代码检查时的类型提示。

Text-To-Song
Text-To-Song

免费的实时语音转换器和调制器

下载

pyi
文件是
PEP484
提案规定的用于 Python 代码类型提示(Type Hints)的文件。
PEP
(Python Enhancement Proposals)是经过 Python 社区核心开发者讨论并一致同意后发布的正式规范文档,如 Python 之禅(
PEP20
)、代码风格
PEP8
格式化(
PEP8
)、将
print
改为函数(
PEP3105
)等。要了解更多关于
PEP
的信息,请参考文章:学习Python,怎能不懂点PEP呢?。

常用的 IDE 都有类型检查提示功能,例如在 PyCharm 中,当给一个函数传入错误类型时会给出提示。这不是 IDE 的特殊开发功能,而是集成了

PEP484
的规定,利用了预先生成的
pyi
文件。

例如,

os.makedirs
是标准库中用于创建文件夹路径的函数,其入参应为字符串类型。如果传入一个
int
类型,IDE 会立刻给出提示。

Python 相关文件常见的后缀名详解[通俗易懂]

按住

ctrl
键点进去,会进入到
os
模块定义
os.makedirs
的地方,发现前面有一个
*
号,鼠标放上去会提示
Has stub item in __init__.pyi

Python 相关文件常见的后缀名详解[通俗易懂]

点击

*
号会跳转到对应的
__init__.pyi
文件,该文件按照
PEP484
规定,为
os
模块的每个函数定义了对应的类型检查规则。

Python 相关文件常见的后缀名详解[通俗易懂]

关于

pyi
文件的定义规则及如何生成,请参考官方文档:PEP 484 – Type Hints。

pyw
是一种 Python 源代码文件,通常只存在于 Windows 系统。

pyw
文件和
py
文件除了后缀名不同外没有任何区别,两者都是 Python 源码文件。如前所述,“如果使用
python + 文件
的方式运行代码,只要文件内容相同,后缀名并不重要”,这一点在 Windows 和 Linux 系统上都是一致的。

在 Windows 系统上,新建两个内容相同的 Python 文件

hello.py
hello.pyw
,使用
python + 文件
的方式运行,结果相同:

# hello.pyprint("hello")
# hello.pywprint("hello")

Python 相关文件常见的后缀名详解[通俗易懂]

那么,为什么还需要

pyw
文件呢?

在 Windows 系统上,双击文件时,系统会根据文件扩展名调用关联的

exe
程序来运行该文件。打开 Python 安装目录,可以看到有
python.exe
pythonw.exe
两个
exe
文件,其中
python.exe
关联了
py
文件,
pythonw.exe
关联了
pyw
文件。与
python.exe
相比,
pythonw.exe
运行时不会弹出控制台窗口,
stdout
stderr
stdin
都无效,因此像
print
这种将内容输出到
stdout
的操作不会有打印结果(因为没有 cmd 窗口显示)。

Python 相关文件常见的后缀名详解[通俗易懂]

因此,在开发 Python GUI 程序时,如果不想让程序运行时弹出黑色的 cmd 窗口,可以将源码文件的后缀名改为

pyw
格式。不过,我个人认为
pyw
格式的实际用处不大,因为很少有人通过双击
py
pyw
文件来运行 Python 代码。我之前使用
tkinter
开发带 Windows 界面的 Python 程序时,是通过双击
bat
脚本启动 Python 脚本来避免弹出黑框框的。

pyd
是 Python 可直接调用的 C 语言动态链接库文件,通常只存在于 Windows 系统。

Python 是一种胶水语言,可以将对速度要求较高的代码使用 C 语言编写,编译成动态链接库文件,再通过 Python 调用。一般来说,在 Linux 上是

so
文件,在 Windows 系统上是
DLL
文件。

例如,有一个 C 语言编写的 Windows 动态链接库

test_lib.dll
,编译前的代码如下:

int sum(int x, int y){        return x + y;}

可以在 Python 代码中通过以下方式调用:

# test_lib.dll 放在当前目录下import ctypesfrom ctypes import *test_lib = ctypes.windll.LoadLibrary("test_lib.dll")a = ctypes.c_int(1)b = ctypes.c_int(2)out = test_lib.sum(a, b)print(out) # 3

在 Windows 系统上,Python 还有一种

pyd
格式的动态链接库。上述调用方式是先通过
ctypes.windll.LoadLibrary
方法将动态链接库加载进来,而
pyd
格式可以在 Python 代码中直接
import
进来,类似如下:

# test_lib.pyd 放在当前目录下import test_libout = test_lib.sum(1, 2)print(out) # 3

关于

pyd
文件和
DLL
文件的区别,请参考官方文档的说明。

C 语言代码和 Python 代码都可以通过一定的方法编译成

pyd
格式的文件,我个人没有实际使用过
pyd
文件,详细方法可参考以下文章:

使用C++创建Pyd文件扩展Python模块

Python源代码保护(Python文件编译生成pyd/so库文件)

pyx
是 Cython 源代码文件。

注意是 Cython 而不是 CPython。Cython 是一种结合了 Python 语法和 C/C++ 效率的编程语言。用 Cython 编写的代码可以很容易转成 C 语言代码,然后编译成动态链接库(

pyd
DLL
)供 Python 调用。因此,Cython 通常用于编写 Python 的 C 扩展。Cython 的源代码文件通常使用
pyx
后缀。

总结

后缀名 作用
py 最常见的 Python 源代码文件。
pyc 常见的 Python 字节码缓存文件,可以反编译成 py 文件。
pyo 另一种 Python 字节码缓存文件,只存在于 Python2 及 Python3.5 之前的版本。
pyi Python 的存根文件,常用于 IDE 代码格式检查时的类型提示。
pyw 另一种 Python 源代码文件,一般只存在于 Windows 系统。
pyd 一种 Python 可直接调用的 C 语言动态链接库文件,一般只存在于 Windows 系统。
pyx Cython 源代码文件,一般用来编写 Python 的 C 扩展。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/81dd4df7529a4765132f4425191d1715

原文链接:https://www.php.cn/link/c8377ad2a50fb65de28b11cfc628d75c

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

758

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

761

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

618

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1264

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

548

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

708

2023.08.11

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

27

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Excel 教程
Excel 教程

共162课时 | 12.1万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号