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

從.py到.pyd帶你深入了解Python文件類(lèi)型

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

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

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

今天我們來(lái)聊聊Python世界中那些形形色色的文件類(lèi)型。

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

Python核心文件類(lèi)型

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

有一些文件類(lèi)型你可能沒(méi)見(jiàn)過(guò),有2種原因:

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

詳細(xì)解析

1. .py - Python源代碼文件

這是最常見(jiàn)的Python文件,包含人類(lèi)可讀的Python代碼。

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

if __name__ == "__main__":
    print(greet("Python開(kāi)發(fā)者: 程序員晚?xiàng)?))

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

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

生成方式

# Python會(huì)自動(dòng)在__pycache__目錄生成.pyc文件
python -m py_compile hello.py

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

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

3. .pyd - Windows動(dòng)態(tài)鏈接庫(kù)

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

這種類(lèi)型,可以理解為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("程序員晚?xiàng)?))

4. .pyx - Cython源代碼文件

Cython是Python的超集,允許編寫(xiě)C擴(kuò)展。

# 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 - 無(wú)控制臺(tái)腳本

在Windows上,.pyw文件運(yùn)行時(shí)不會(huì)顯示控制臺(tái)窗口,適合GUI應(yīng)用。

# my_app.pyw
import tkinter as tk

root = tk.Tk()
root.title("無(wú)控制臺(tái)應(yīng)用")
root.mainloop()

包與分發(fā)文件

包相關(guān)文件

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

分發(fā)與安裝

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

配置文件類(lèi)型

項(xiàng)目配置

# pyproject.toml(現(xiàn)代Python項(xiàng)目)
[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)境與工具配置

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

特殊用途文件

1. .pyi - 存根文件

用于類(lèi)型提示,不包含實(shí)現(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)用

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

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

# 運(yùn)行
python app.pyz

開(kāi)發(fā)工具文件

測(cè)試相關(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ì)量

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

實(shí)際項(xiàng)目示例

一個(gè)典型的Python項(xiàng)目結(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

實(shí)用技巧

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)建專(zhuān)業(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',
        ],
    },
)

性能對(duì)比:.py vs .pyd

在某些場(chǎng)景下,編譯成.pyd可以顯著提升性能:

# 性能測(cè)試示例
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

# 測(cè)試性能
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ā),每種文件類(lèi)型都有其特定用途:

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

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

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

相關(guān)文章

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

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

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

    Python文件簡(jiǎn)單操作及openpyxl操作excel文件詳解

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

    Python輕松實(shí)現(xiàn)PDF頁(yè)面的自動(dòng)化旋轉(zhuǎn)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

苏尼特右旗| 金昌市| 佛坪县| 商水县| 中超| 赤城县| 庆元县| 龙泉市| 安西县| 新沂市| 黄大仙区| 通河县| 夹江县| 三台县| 玉林市| 溧水县| 邯郸县| 滦南县| 乌海市| 清流县| 阿城市| 正安县| 普兰店市| 台北市| 肇东市| 南昌市| 宽甸| 桃源县| 博湖县| 灵宝市| 蓬溪县| 凤台县| 漳平市| 临清市| 杂多县| 玉门市| 廉江市| 仙桃市| 林甸县| 临清市| 措美县|