当前位置: 代码网 > it编程>前端脚本>Python > Python开发必看:py、pyc、pyo、pyi文件类型详解

Python开发必看:py、pyc、pyo、pyi文件类型详解

2026年08月16日 Python 我要评论
python 的文件后缀python 常见的文件后缀有:py、pyc、pyc、pyi、pyw、pyd、pyx 等。py,python 源代码文件,使用 python xxx.py 即可执行源码文件。p

python 的文件后缀

python 常见的文件后缀有:pypycpycpyipywpydpyx 等。

  • pypython 源代码文件,使用 python xxx.py 即可执行源码文件。
  • pycpython 源代码编译生成的文件,由 python 的虚拟机执行,相对于 .py 文件来说,.pyc 只是模块加载速度提高,并没有提高代码的执行速度,更多的意义在于避免源码的泄露。
  • pyo,优化后的 python 字节码缓存文件,pyo 文件和 pyc 文件基本上没有区别,唯一的优化是去掉了断言语句,即 assert 语句。
  • pyipython 的存根文件,用于代码检查时的类型提示。
  • pywpython 源文件的一种,一般只存在于 windows 系统。
  • pydpython 可直接调用的 c 语言动态链接库文件,一般只存在于 windows 系统。
  • pyxcython 源代码文件,一般用来编写 pythonc 扩展。

python 的编译和反编译

python 的编译指的是将 py 文件编译为 pyc 文件,反编译则为该操作的逆向动作。

python 源文件的编译

python 的编译共有以下三种方式:

1.使用 python xxx.py 执行文件的过程中进行编译。

首先准备一个简单的 python 文件 hello.py,内容如下:

# hello.py
print("hello world")

使用 python hello.py,执行该文件并没有生成 pyc 文件。

再创建一个 import.py 的文件,内容如下:

# import.py
import hello

使用 python import.py,执行该文件的时候,生成了 pyc 文件,python3 执行代码,会在当前目录下创建 __pycache__ 目录下生成对应的 pyc 文件。

使用 python 可以直接执行该 pyc 文件,与执行 python import.py 的效果一致。

2.使用 py_compile 第三方库编译源文件。

执行该步骤之前,先删除上一步操作生成的 __pycache__ 这个目录,这一步操作是执行 python 代码进行的编译操作,进行转化的代码参考如下内容,使用第三方库进行编译,无需考虑代码中是否包含 import 语句,均能够正常编译,如下所示:

import py_compile
py_compile.compile('sample.py')

这里也可以使用 python -m 指定 py_compile 第三方库对文件进行编译。

3.使用 compileall 第三方库编译源文件。

执行该步骤之前,先删除上一步操作生成的 __pycache__ 这个目录,进行编译的操作与 py_compile 基本类似,不同的是 compileall 能够对文件进行迭代编译,进行编译操作的代码如下所示:

import compileall
compileall.compile_file('hello.py')
# 可以递归编译文件夹下所有的python源代码文件
compileall.compile_dir('dir/', force=true)

执行完成如上代码后,在当前目录以及 dir 目录下生成对应的文件编译的 pyc 文件,直接进行执行,如下所示:

这里和 py_compile 一样,也能够直接指定文件进行编译,如下所示:

python -m compileall .\hello.py
python -m compileall .\dir\

python 的反编译

编译能够在一定程度上实现隐藏源代码的效果,可以通过反编译 pyc 文件来获取 py 源代码,这里使用 uncompyle6 第三方库,具体的过程如下:

1.安装 uncompyle6 第三方库。

pip install uncompyle6 -i https://pypi.tuna.tsinghua.edu.cn/simple

2.使用 uncompyle6pyc 文件进行反编译。

uncompyle6 -o . *.pyc

3.打开生成的 py 源代码,内容如下,包含有 python 版本信息、uncompyle6 版本信息,以及源代码内容。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com