最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從.py到.pyd帶你深入了解Python文件類型

 更新時間:2025年11月19日 09:02:48   作者:程序員晚楓  
作為一個Python開發(fā)者,你肯定經(jīng)常跟.py文件打交道,但Python生態(tài)中其實還有很多其他重要的文件類型,每種都有其獨特的用途,下面小編就和大家詳細(xì)講講吧

最近有了[AI編程],Python的熱度降低了,我也終于有時間關(guān)注一直感興趣的Python話題,而不是回答Python怎么安裝這種入門問題了。

我對于Python興趣的探索,主要基于兩本書:《流暢的Python》、《Python高性能編程》。越深入了解Python高級語法,越能深入理解這門語言設(shè)計的精妙之處。

今天我們來聊聊Python世界中那些形形色色的文件類型。

作為一個Python開發(fā)者,你肯定經(jīng)常跟.py文件打交道。但Python生態(tài)中其實還有很多其他重要的文件類型,每種都有其獨特的用途。

Python核心文件類型

文件類型主要用途是否可讀生成方式
.pyPython源代碼手動創(chuàng)建
.pyc編譯后的字節(jié)碼Python自動生成
.pyo優(yōu)化后的字節(jié)碼Python帶-O參數(shù)生成
.pydWindows動態(tài)鏈接庫Cython/C擴展編譯
.soLinux/Mac動態(tài)庫Cython/C擴展編譯
.pyw無控制臺Python腳本手動創(chuàng)建
.pyxCython源代碼手動創(chuàng)建

有一些文件類型你可能沒見過,有2種原因:

  • 你沒有這么復(fù)雜的工作場景,例如so文件的使用
  • 部分類型被編輯器給自動屏蔽了,例如:pyc文件

詳細(xì)解析

1. .py - Python源代碼文件

這是最常見的Python文件,包含人類可讀的Python代碼。

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

if __name__ == "__main__":
    print(greet("Python開發(fā)者: 程序員晚楓"))

2. .pyc - 編譯字節(jié)碼文件

Python解釋器將.py文件編譯成字節(jié)碼,加速后續(xù)執(zhí)行。

生成方式

# Python會自動在__pycache__目錄生成.pyc文件
python -m py_compile hello.py

文件結(jié)構(gòu)

  • 位于__pycache__目錄
  • 命名格式:hello.cpython-39.pyc
  • 包含Python字節(jié)碼,不是機器碼

3. .pyd - Windows動態(tài)鏈接庫

.pyd文件本質(zhì)上是DLL文件,但可以被Python直接導(dǎo)入。

這種類型,可以理解為java中的jar包格式,可以打包后給別人使用。

創(chuàng)建示例(使用Cython):

# 安裝Cython
pip install cython

# 創(chuàng)建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文件

# 像普通模塊一樣導(dǎo)入
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 a

5. .pyw - 無控制臺腳本

在Windows上,.pyw文件運行時不會顯示控制臺窗口,適合GUI應(yīng)用。

# my_app.pyw
import tkinter as tk

root = tk.Tk()
root.title("無控制臺應(yīng)用")
root.mainloop()

包與分發(fā)文件

包相關(guān)文件

文件類型用途
init.py包初始化文件(Python 3.3+可選)
main.py包作為腳本執(zhí)行時的入口

分發(fā)與安裝

文件類型用途
.whlPython包的分發(fā)格式(wheel)
.egg舊版包分發(fā)格式
setup.py包安裝腳本
setup.cfg包配置
pyproject.toml現(xiàn)代包配置
requirements.txt依賴列表

配置文件類型

項目配置

# pyproject.toml(現(xiàn)代Python項目)
[build-system]
requires = ["setuptools", "wheel"]

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

# setup.cfg(傳統(tǒng)配置)
[metadata]
name = my-project
version = 0.1.0

# requirements.txt
requests>=2.25.0
pandas>=1.3.0

環(huán)境與工具配置

文件類型用途
.python-versionpyenv版本文件
Pipfilepipenv依賴管理
Pipfile.lock依賴鎖文件
environment.ymlconda環(huán)境配置

特殊用途文件

1. .pyi - 存根文件

用于類型提示,不包含實現(xiàn)代碼。

# 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/modules

3. .pyz - 自包含應(yīng)用

包含所有依賴的zip應(yīng)用。

# 創(chuàng)建.pyz文件
python -m zipapp my_app -o app.pyz

# 運行
python app.pyz

開發(fā)工具文件

測試相關(guān)

# 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"}

代碼質(zhì)量

文件類型用途
.pylintrcPylint配置
.flake8Flake8配置
.coveragerc測試覆蓋率配置
.pre-commit-config.yamlGit鉤子配置

實際項目示例

一個典型的Python項目結(jié)構(gòu):

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文件內(nèi)容

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. 創(chuàng)建專業(yè)的分發(fā)包

# 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編譯版本(假設(shè)已編譯為.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")

總結(jié)

Python的文件生態(tài)系統(tǒng)非常豐富,從源代碼到編譯文件,從配置到分發(fā),每種文件類型都有其特定用途:

  • 開發(fā)階段:主要使用.py、.pyx
  • 運行階段:涉及.pyc、.pyd.so
  • 分發(fā)階段:使用.whl、.egg
  • 配置管理:各種配置文件

掌握這些文件類型的特點和用途,能夠幫助你更好地組織項目、優(yōu)化性能和管理依賴。

到此這篇關(guān)于從.py到.pyd帶你深入了解Python文件類型的文章就介紹到這了,更多相關(guān)Python文件類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)遞歸遍歷文件夾并刪除文件

    Python實現(xiàn)遞歸遍歷文件夾并刪除文件

    本文給大家匯總了3個Python實現(xiàn)遍歷文件夾并刪除的代碼,主要是給大家分享下這3種方法的實現(xiàn)思路,有需要的小伙伴可以參考下
    2016-04-04
  • Python文件簡單操作及openpyxl操作excel文件詳解

    Python文件簡單操作及openpyxl操作excel文件詳解

    這篇文章主要為大家詳細(xì)介紹了python對文件的簡單使用及openpyxl操作excel文件的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-10-10
  • Python輕松實現(xiàn)PDF頁面的自動化旋轉(zhuǎn)

    Python輕松實現(xiàn)PDF頁面的自動化旋轉(zhuǎn)

    本文將深入探討如何利用Python,通過一個功能豐富的庫,輕松實現(xiàn)PDF頁面的自動化旋轉(zhuǎn),讓你徹底告別手動調(diào)整的繁瑣,大幅提升工作效率,希望對大家有所幫助
    2026-01-01
  • 對Pandas DataFrame缺失值的查找與填充示例講解

    對Pandas DataFrame缺失值的查找與填充示例講解

    今天小編就為大家分享一篇對Pandas DataFrame缺失值的查找與填充示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 解決ImportError:cannot import name ‘Flatten‘ from ‘torch.nn‘問題

    解決ImportError:cannot import name ‘Flatten‘&nb

    這篇文章主要介紹了解決ImportError:cannot import name ‘Flatten‘ from ‘torch.nn‘問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 詳解Python字符串原理與使用的深度總結(jié)

    詳解Python字符串原理與使用的深度總結(jié)

    本文將學(xué)習(xí)字符串?dāng)?shù)據(jù)類型相關(guān)知識,將討論如何聲明字符串?dāng)?shù)據(jù)類型,字符串?dāng)?shù)據(jù)類型與?ASCII?表的關(guān)系,字符串?dāng)?shù)據(jù)類型的屬性,以及一些重要的字符串方法和操作,超級干貨,不容錯過
    2022-05-05
  • python讀取與寫入tif圖片的完整信息(過程詳解)

    python讀取與寫入tif圖片的完整信息(過程詳解)

    這篇文章主要介紹了python讀取與寫入tif圖片的完整信息,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 利用selenium爬蟲抓取數(shù)據(jù)的基礎(chǔ)教程

    利用selenium爬蟲抓取數(shù)據(jù)的基礎(chǔ)教程

    這篇文章主要給大家介紹了關(guān)于如何利用selenium爬蟲抓取數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用selenium具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python基于mediainfo批量重命名圖片文件

    Python基于mediainfo批量重命名圖片文件

    這篇文章主要介紹了Python基于mediainfo批量重命名圖片文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 利用Python讀取文件的四種不同方法比對

    利用Python讀取文件的四種不同方法比對

    Python的文本處理是經(jīng)常碰到的一個問題,下面這篇文章主要給大家介紹了關(guān)于Python讀取文件的幾種不同方法比對的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家理解和學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-05-05

最新評論

台北县| 郑州市| 内乡县| 炉霍县| 东阿县| 临夏市| 塔城市| 龙井市| 曲阜市| 广州市| 南通市| 沂南县| 乌拉特中旗| 琼结县| 三门县| 称多县| 井冈山市| 海南省| 防城港市| 东丰县| 毕节市| 济阳县| 麟游县| 嘉禾县| 宁武县| 武冈市| 宁蒗| 象州县| 文安县| 疏附县| 揭西县| 正镶白旗| 耒阳市| 黄龙县| 定襄县| 闵行区| 蚌埠市| 白沙| 平原县| 囊谦县| 台北市|