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 的存根文件,用于代码检查时的类型提示。

帮衣帮-AI服装设计
帮衣帮-AI服装设计

AI服装设计神器,AI生成印花、虚拟试衣、面料替换

下载

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

187

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

1

2026.02.03

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

381

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

213

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1506

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

628

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

738

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

670

2024.04.29

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

19

2026.02.03

热门下载

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

精品课程

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

共48课时 | 8.4万人学习

Excel 教程
Excel 教程

共162课时 | 15.4万人学习

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

共33课时 | 2.1万人学习

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

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