跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

从.py到.pyd带你深入了解Python文件类型

目录Python核心文件类型详细解析1. .py - Python源代码文件2. .pyc - 编译字节码文件3. .pyd - Windows动态链接库4. .pyx - Cython源代码文件5. .pyw - 无控制台脚本包与分发文件包相关文件分发与安装配置文件类型项目配置环境与工具配置特殊用途文件1. .pyi - 存根文件2. .pth - 路径配置文件3. .pyz - 自包含应用开发工具文件测试相关代码质量实际项目示例实用技巧

1. 查看.pyc文件内容

2. 将Python包编译成.pyd

3. 创建专业的分发包

性能对比:.py vs .pyd总结最近有了[AI编程],Python的热度降低了,我也终于有时间关注一直感兴趣的Python话题,而不是回答Python怎么安装这种入门问题了。

我对于Python兴趣的探索,主要基于两本书:《流畅的Python》、《Python高性能编程》。越深入了解Python高级语法,越能深入理解这门语言设计的精妙之处。

今天我们来聊聊Python世界中那些形形色色的文件类型。

作为一个Python开发者,你肯定经常跟.py文件打交道。但Python生态中其实还有很多其他重要的文件类型,每种都有其独特的用途。

Python核心文件类型文件类型主要用途是否可读生成方式.py Python源代码是手动创建.pyc编译后的字节码否Python自动生成.pyo优化后的字节码否Python带-O参数生成.pyd Windows动态链接库否Cython/C扩展编译.so Linux/Mac动态库否Cython/C扩展编译.pyw无控制台Python脚本是手动创建.pyx Cython源代码是手动创建有一些文件类型你可能没见过,有2种原因:你没有这么复杂的工作场景,例如so文件的使用部分类型被编辑器给自动屏蔽了,例如:pyc文件详细解析1. .py - Python源代码文件这是最常见的Python文件,包含人类可读的Python代码。

# hello.py def greet(name):return f"Hello, {name}!"

if __name__ == "__main__":print(greet("Python开发者: 程序员晚枫"))2. .pyc - 编译字节码文件Python解释器将.py文件编译成字节码,加速后续执行。

生成方式:# Python会自动在__pycache__目录生成.pyc文件python -m py_compile hello.py文件结构:位于__pycache__目录

命名格式:

hello.cpython-39.pyc包含Python字节码,不是机器码3. .pyd - Windows动态链接库.pyd文件本质上是DLL文件,但可以被Python直接导入。

这种类型,可以理解为java中的jar包格式,可以打包后给别人使用。

创建示例

(使用Cython):

# 安装Cython pip install cython

# 创建Cython文件# hello.pyx def cython_greet(name):return f"Hello from Cython, {name}!"

# setup.py from setuptools import setup from Cython.Build import cythonize

setup(ext_modules=cythonize("hello.pyx"))

# 编译生成.pyd python setup.py build_ext --inplace使用.pyd文件:# 像普通模块一样导入import hello print(hello.cython_greet("程序员晚枫"))4. .pyx - Cython源代码文件Cython是Python的超集,允许编写C扩展。

# fastmath.pyx def fibonacci(int n):cdef int i cdef double a = 0.0, b = 1.0 for i in range(n):a, b = b, a + b return a5. .pyw - 无控制台脚本在Windows上,.pyw文件运行时不会显示控制台窗口,适合GUI应用。

# my_app.pyw import tkinter as tk

root = tk.Tk() root.title("无控制台应用") root.mainloop()包与分发文件包相关文件文件类型用途init.py包初始化文件(Python 3.3+可选)

main.py包作为脚本执行时的入口分发与安装文件类型用途.whl Python包的分发格式(wheel)

.egg旧版包分发格式setup.py包安装脚本setup.cfg包配置pyproject.toml现代包配置requirements.txt依赖列表配置文件类型项目配置# pyproject.toml(现代Python项目)

[build-system]requires = ["setuptools", "wheel"]

[project]name = "my-project"version = "0.1.0"

# setup.cfg(传统配置)

[metadata]name = my-project version = 0.1.0

# requirements.txt requests>=2.25.0 pandas>=1.3.0环境与工具配置文件类型用途.python-version pyenv版本文件Pipfile pipenv依赖管理Pipfile.lock依赖锁文件environment.yml conda环境配置特殊用途文件1. .pyi - 存根文件用于类型提示,不包含实现代码。

# math.pyi def sqrt(x: float) -> float: ...

def pow(x: float, y: float) -> float: ...

2. .pth - 路径配置文件在Python路径中添加自定义路径。

# my_paths.pth/home/user/my_python_libs../relative/path/to/modules3. .pyz - 自包含应用包含所有依赖的zip应用。

# 创建.pyz文件python -m zipapp my_app -o app.pyz

# 运行python app.pyz开发工具文件测试相关# test_example.py import pytest

def test_addition():assert 1 + 1 == 2

# conftest.py(pytest配置)

import pytest

@pytest.fixture def sample_data():return {"key": "value"}代码质量文件类型用途.pylintrc Pylint配置.flake8 Flake8配置.coveragerc测试覆盖率配置.pre-commit-config.yaml Git钩子配置实际项目示例一个典型的Python项目结构:my_project/

├── src/

│   ├── __init__.py

│   ├── main.py

│   └── utils.py

├── tests/

│   ├── __init__.py

│   └── test_main.py

├── docs/

│   └── conf.py

├── .python-version

├── pyproject.toml

├── requirements.txt

├── setup.py

└── README.md实用技巧

1. 查看.pyc文件内容

python -m dis hello.pyc

2. 将Python包编译成.pyd

# 使用Cython批量编译from Cython.Build import cythonize from setuptools import setup, Extension

extensions = [Extension("my_module", ["my_module.pyx"])]

setup(ext_modules=cythonize(extensions))

3. 创建专业的分发包

# setup.py from setuptools import setup, find_packages

setup(name="my-package",version="1.0.0",packages=find_packages(),install_requires=["requests>=2.25.0",],entry_points={'console_scripts': ['my-command=my_package.cli:main',],},)性能对比:.py vs .pyd在某些场景下,编译成.pyd可以显著提升性能:# 性能测试示例import timeit

# Python版本def python_fib(n):if n <= 1:return n return python_fib(n-1) + python_fib(n-2)

# Cython编译版本(假设已编译为.pyd)

from cython_fib import cython_fib

# 测试性能n = 35 python_time = timeit.timeit(lambda: python_fib(n), number=1) cython_time = timeit.timeit(lambda: cython_fib(n), number=1)

print(f"Python: {python_time:.2f}s") print(f"Cython: {cython_time:.2f}s") print(f"加速比: {python_time/cython_time:.1f}x")总结Python的文件生态系统非常丰富,从源代码到编译文件,从配置到分发,每种文件类型都有其特定用途:开发阶段:主要使用.py.pyx运行阶段:涉及.pyc.pyd.so分发阶段:使用.whl.egg配置管理:各种配置文件掌握这些文件类型的特点和用途,能够帮助你更好地组织项目、优化性能和管理依赖。

到此这篇关于从.py到.pyd带你深入了解Python文件类型的文章就介绍到这了,更多相关Python文件类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Python 存根文件(.pyi)简介与实战案例及类型提示的高级指南python中各种常见文件的读写操作与类型转换详细指南Python实现对文件类型的获取方法python读取多类型文件夹中的文档内容史上最全Python文件类型读写库大盘点python实现批量提取指定文件夹下同类型文件Python 如何查找特定类型文件

相关文章