ホームページ > バックエンド開発 > Python チュートリアル > 5でPythonツールボックスを再考する必要がある理由

5でPythonツールボックスを再考する必要がある理由

DDD
リリース: 2025-01-26 06:10:12
オリジナル
474 人が閲覧しました

Why You Should Rethink Your Python Toolbox in 5

2025 年に向けて Python ツールボックスをアップグレード: 見逃していた重要なライブラリを探索してください

この記事は元々ここで公開されました: https://www.php.cn/link/00bd13095d06c20b11a2993ca419d16b

Python は強力ですが、ツールを使用するとプログラミングの達人になれる場合もあれば、トラブルに巻き込まれる場合もあります。世界の他の国々が急速なペースで進化している一方で、依然として古いツールを使用している開発者の一人にならないでください。

多くの開発者は依然として Pandas、Requests、BeautifulSoup などのライブラリに大きく依存していますが、これらは現代の開発ニーズに対する最も効率的なソリューションであるとは限りません。この記事では、開発プロセスを強化し、時代の先を行くのに役立つ 2025 年の主要な Python ライブラリのいくつかについて説明します。

A) 廃止されたライブラリとより優れた代替ライブラリ

  1. ファイル操作のために OS を放棄します: pathlib を使用します

OS モジュールは、プラットフォーム固有のパス区切り文字や冗長な構文などの問題があるため、ファイルとパスの処理の点で面倒なことがよくあります。 pathlib は、パスを連結するための /、検査のための .exists().is_file() などの直感的なオブジェクト指向メソッドを使用してこれを簡素化し、シームレスなクロスプラットフォーム互換性を実現します。 pathlib は、よりクリーンな構文と組み込み機能により、手動チューニングの必要性を排除し、最新の Python 開発者にとって最適なソリューションとなっています。

例:

<code class="language-python">from pathlib import Path

# 创建文件
file = Path("example.txt")
file.write_text("Hello, Pathlib!")

# 读取文件
print(file.read_text())

# 检查是否存在
if file.exists():
    print("File exists")</code>
ログイン後にコピー
ログイン後にコピー

なぜ切り替えるのですか?

pathlib は作業を容易にします。これは os よりも直観的であり、ファイルとパスの処理にオブジェクト指向のアプローチを使用します。 pathlib がすべてを処理してくれるため、プラットフォーム固有の問題 (/ など) について心配する必要はありません。さらに、構文がシンプルになり読みやすくなりました。

これは小規模なプロジェクトにとっては変革をもたらすものではありませんが、大規模なプロジェクトにとっては間違いなく前進する方法です。

  1. リクエストを httpx に置き換えます: 非同期および同期リクエスト用の最新の HTTP クライアント

HTTPX は、特に 2025 年にはリクエストに代わる強力な手段となりました。リクエストとは異なり、HTTPX は HTTP/2 サポートも提供します。これにより、多重接続が可能になることでレイテンシが大幅に短縮され、リクエスト処理が向上します。 httpx は、Requests API のシンプルさと使いやすさを損なうことなく、非同期操作をサポートする最新の代替手段です。

例:

<code class="language-python">import httpx
import asyncio

# asyncio用于启用异步编程,对于httpx的非阻塞HTTP请求来说是不可或缺的。
# 使用httpx,你可以使用async/await语法同时运行多个HTTP请求。


# 演示使用httpx的异步请求
async def async_get_data():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://jsonplaceholder.typicode.com/posts/1')
        if response.status_code == 200:
            print("Async Response:", response.json())
        else:
            print(f"Error: {response.status_code}")

# 运行异步请求
asyncio.run(async_get_data())

# 使用httpx的异步HTTP/2请求
async def async_http2_request():
    async with httpx.AsyncClient(http2=True) as client:
        response = await client.get('https://http2.golang.org/reqinfo')
        if response.status_code == 200:
            print("HTTP/2 Response:", response.text)
        else:
            print(f"Error: {response.status_code}")

# 运行HTTP/2请求
asyncio.run(async_http2_request())

# 使用httpx客户端进行连接池
def connection_pooling_example():
    with httpx.Client(keep_alive=True) as client:
        url = "https://jsonplaceholder.typicode.com/posts/1"
        # 使用连接池进行多次请求
        for _ in range(5):
            response = client.get(url)
            if response.status_code == 200:
                print("Response Content:", response.text)
            else:
                print(f"Error: {response.status_code}")

# 运行连接池示例
connection_pooling_example()</code>
ログイン後にコピー
ログイン後にコピー

なぜ httpx を使用するのですか?

高い同時実行性を必要とするアプリケーション (Web スクレイピングやマイクロサービスなど) を開発している場合、HTTPX の非同期操作のサポートにより、パフォーマンスが大幅に向上します。

HTTPX のもう 1 つの重要な利点は、ホストごとのデフォルトの接続プールであり、これにより遅延とリソースの消費が削減されます。

基本的に、大量の I/O を処理する場合、httpx を使用すると多くの問題が軽減されます。

  1. パンダを超えて: Polars を使用する

Pandas は小規模から中規模のデータ セットに最適ですが、より大きなデータ セットを追加すると、メモリ使用量とパフォーマンスが低下し始めます。

メモリ消費の遅さ、非効率な列操作、データ変換 (.fillna().loc など) などの問題は、Pandas を使用する多くの開発者が遭遇する一般的な問題です。

Polars は、大規模なデータ セットに対して Pandas に代わる高速な代替手段を提供する、メモリ効率の高い最新のマルチスレッド データ処理ライブラリです。 Pandas とは異なり、Polars は並列処理をサポートしているため、データ操作タスクが高速化されます。

例:

<code class="language-python">from pathlib import Path

# 创建文件
file = Path("example.txt")
file.write_text("Hello, Pathlib!")

# 读取文件
print(file.read_text())

# 检查是否存在
if file.exists():
    print("File exists")</code>
ログイン後にコピー
ログイン後にコピー

Polars を使用する理由

したがって、大規模なデータ処理を扱っている場合、並列実行が必要な場合、またはメモリ効率の高いソリューションが必要な場合は、最新のデータ サイエンスと分析には Polars が最適です。パンダはあなたの初恋の人かもしれませんが、Polars は重労働をこなすことができる人です。

  1. テスト ゲームをアップグレードします。unittest を pytest に置き換えます

単体テスト?確かにそれはうまくいきますが、さあ、今は 2025 年です。それでは誰も引き寄せることはできません。みんながiPhoneを使っているときに、ガラケーで誰かを誘惑しようとするようなものです。はい、機能しますが、まったく迷惑です。 pytest: これは、テストの作成と読み取りを容易にするクールな最新のテスト フレームワークです。

単体テストとは何ですか?

馴染みのない人のために説明すると、unittest は Python の組み込みテスト フレームワークですが、冗長な構文と反復的な定型コードがあり、時代遅れに感じられることがよくあります。 pytest を使用すると、柔軟なフィクスチャ管理、自動テスト検出、組み込みパラメータ化 (@pytest.mark.parametrize を使用) などの強力な機能を利用して、異なる入力で同じテストを簡単に実行できます。また、pytest-xdist による並列テストの実行もサポートされており、大規模なテスト スイートのパフォーマンスが向上します。

例:

<code class="language-python">import httpx
import asyncio

# asyncio用于启用异步编程,对于httpx的非阻塞HTTP请求来说是不可或缺的。
# 使用httpx,你可以使用async/await语法同时运行多个HTTP请求。


# 演示使用httpx的异步请求
async def async_get_data():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://jsonplaceholder.typicode.com/posts/1')
        if response.status_code == 200:
            print("Async Response:", response.json())
        else:
            print(f"Error: {response.status_code}")

# 运行异步请求
asyncio.run(async_get_data())

# 使用httpx的异步HTTP/2请求
async def async_http2_request():
    async with httpx.AsyncClient(http2=True) as client:
        response = await client.get('https://http2.golang.org/reqinfo')
        if response.status_code == 200:
            print("HTTP/2 Response:", response.text)
        else:
            print(f"Error: {response.status_code}")

# 运行HTTP/2请求
asyncio.run(async_http2_request())

# 使用httpx客户端进行连接池
def connection_pooling_example():
    with httpx.Client(keep_alive=True) as client:
        url = "https://jsonplaceholder.typicode.com/posts/1"
        # 使用连接池进行多次请求
        for _ in range(5):
            response = client.get(url)
            if response.status_code == 200:
                print("Response Content:", response.text)
            else:
                print(f"Error: {response.status_code}")

# 运行连接池示例
connection_pooling_example()</code>
ログイン後にコピー
ログイン後にコピー

なぜ test_ を使用するのですか?

test_ 接頭辞を使用すると、これらの関数がテストであるべきであることを pytest に対して明確にできます。これは、追加の設定を行わずに正しい関数を検出して実行するための pytest の規則の一部です。

つまり、pytest は、unittest の不器用なセットアップを置き換え、テストをより効率的、柔軟、スケーラブルなものにします。

2025 年にさらに注目されるべき図書館

    クロスプラットフォームPythonアプリケーション開発のためのBeeware
  1. Beewareは、特に2025年には、より多くの注目に値するPythonフレームワークです。これにより、Python開発者は同じコードライブラリを使用して、複数のプラットフォーム(デスクトップ、モバイル、Web)にネイティブアプリケーションを書き込むことができます。 PyqtやTkinterなどの従来のデスクトップフレームワークとは異なり、BeewareはさらにAndroid、iOS、さらにはWebAssemblyでの展開をサポートしています。 Beewareの重要な機能の1つは、クロスプラットフォーム機能です。そのため、アプリケーションを1回作成してどこでも実行できます。
データ検証のための

pydantic

    データの検証は苦いものかもしれません。 Pydanticは、タイプのプロンプトに基づいてデータを検証および分析するPythonライブラリです。乱雑なデータまたは信頼できないデータ(API応答、ユーザー入力、構成など)を処理している場合、Pydanticはデータがクリーンで構造化され、間違っていることを確認できます。
  1. 梱包と依存管理のための詩
詩は、依存管理とプロジェクトのパッケージングを容易にするための最新のPythonツールです。

    を使用してバージョンを実行して、繰り返し構築できることを確認し、Pypiを公開するプロセスを簡素化します。依存図の透明性が向上し、PIPやSetuptoolsなどの古いツールよりも強力な代替品になります。
  1. 現代APIのFASTAPI
FASTAPIは、APIを構築するためのフラスコまたはDjango RESTフレームワークの代替として通常使用される高性能Pythonフレームワークです。スケーラビリティと効率のため、小規模プロジェクトや大規模なアプリケーションに非常に適しています。 Fastapiは、Pythonのタイプを統合してデータ検証を示し、Openapiドキュメントを自動的に生成し、開発がより速く、間違いを犯す可能性が高いため、強調表示されています。

asyncpgはデータベース操作に使用されますpyproject.toml poetry.lock

    asyncpgは、Python用の高いパフォーマンスの非同期PostgreSQLデータベースドライバーです。 Pythonアプリケーションでクイッククエリを作成したいですか?さて、ブロッキングコールが遅くなることで、アプリケーションがダイヤルインターネットを使用しているのと同じくらい遅くなります。 PSYCOPG2などの従来の同期ライブラリとは異なり、ASYNCPGは非同期プログラミングを使用して、アプリケーションの他のタスクをブロックすることなくデータベース操作を最適化します。
  1. duckdbはメモリ分析で使用されています

duckdbは、複雑な分析とクエリを効果的に実行することを目的とする高速のメモリデータベースです。 PostgreSQLなどの従来のデータベースとは異なり、DuckDBはメモリ内のデータを直接使用して、外部サーバーなしで大規模なデータセットをすばやく処理できます。
  1. 最終的なアイデア
  2. 2025年、Pythonツールボックスを再検討する時が来ました。リクエストやパンダなどの古典的なライブラリには効果がありますが、HTTPX、Polars、Rich、DuckDBなどの新興ライブラリはワークフローを簡素化できます。

以上が5でPythonツールボックスを再考する必要がある理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート