【Pythonプログラミング】データ人材入門 [02/8]

1. 説明

        Python の依存関係を管理する方法と、仮想環境のベスト プラクティスについて説明します。 次の記事は、データ エンジニアリングのための Python シリーズの一部であり、データ エンジニア、データ サイエンティスト、データ アナリスト、機械学習エンジニア、または Python を初めて使用する人が基本をマスターできるように設計されています。これまでのところ、この初心者向けガイドには次の内容が含まれています。

        より大規模で複雑なパッケージを構築する場合、多くの場合、プロジェクト内の他のパッケージのコードを使用する必要があります。ここで依存関係の管理が重要になります。

        今日は Python における依存関係管理がどのようなものであるかについて話しましょう。新旧のメソッドを使用して Python パッケージを管理する方法、さまざまな依存関係管理ツール、仮想環境を使用してパッケージを管理する方法まで、すべてを取り上げます。

目次

2. 依存関係を管理する

        依存関係は、パッケージが適切に動作するために依存する他のパッケージです。依存関係を追跡するのは難しい場合がありますが、依存関係を効果的に管理するためのツールがあります。

そのようなツールの 1 つは、オープン ソース Python パッケージの中央リポジトリである        Python  Package Index (PyPI) です。PyPI を使用して、プロジェクトに含めることができるパッケージを検索し、パッケージを他の人が利用できるようにすることができます。

        次のセクションでは、Python プロジェクトで依存関係を管理する 2 つの異なる方法、つまり古い方法と新しい方法について説明します。setup.pypyproject.toml

2.1 従来の方法で依存関係を管理する:setup.py

導入前は、ファイルを使用して Python プロジェクトの依存関係を管理するアプローチが推奨されていました。pyproject.tomlsetup.py

setup.pyプロジェクトのルート ディレクトリに含まれるファイルで、パッケージとその依存関係に関する情報が含まれています。このファイルは、パッケージとその依存関係をインストールするためにpip (Python のパッケージ インストーラー)によって使用されます 。

ファイルの例を次に示します。setup.py

from setuptools import setup, find_packages

setup(
    name='your-package-name',
    version='0.0.1',
    description='A brief description of your package',
    author='Your Name',
    author_email='[email protected]',
    packages=find_packages(),
    install_requires=[
        'dependency1',
        'dependency2',
    ],
)
  • および は、パッケージの名前とバージョンを指定する必須フィールドです。nameversion
  • このフィールドには、パッケージの簡単な説明が表示されます。description
  • およびフィールドには、パッケージの責任者の名前と電子メール アドレスを指定します。このフィールドは、プロジェクトに含まれるパッケージを指定します。この関数は、プロジェクト内のすべてのパッケージを自動的に検索するために使用されます。authorauthor_emailpackagesfind_packages()
  • このフィールドは、パッケージが適切に機能するために必要な依存関係のリストです。この例では、パッケージは他の 2 つのパッケージ、dependency1 と dependency2 に依存しています。install_requires

パッケージの依存関係をインストールするには、次のコマンドを実行できます。

pip install -e .

        このオプションは、pip に「編集可能な」インストールを実行するように指示します。これにより、パッケージを再インストールせずに変更を加えることができます。コマンドの最後に現在のディレクトリ (パッケージのルート ディレクトリ) を指定します。-e.

上記のコマンドを実行すると、pip によってグローバル環境に依存関係がインストールされるため、複数のプロジェクトで作業している場合に問題が発生する可能性        があることに注意することが重要です。この問題は仮想環境で解決されます。これについてはこの記事で後ほど説明します。

2.2 依存関係を管理する新しい方法:pyproject.toml

   pyproject.tomlは、Python プロジェクトの依存関係を管理するための setup.py に代わる新しいファイル形式です。これは PEP 518 および PEP 621 の一部として導入されました。

        これは、パッケージとその依存関係をインストールするために pip が使用する構成ファイルです。それに比べて、形式がシンプルで、読みやすく、保守しやすいです。setup.py

        pyproject.toml ファイルの例を次に示します。

[project]
name = "your-package-name"
version = "0.0.1"
description = "A brief description of your package"
authors = ["Your Name <[email protected]>"]

[project.dependencies]
dependency1 = "^1.0"
dependency2 = "^2.0"
  • および フィールドは必須であり、パッケージの名前とバージョンを指定します。nameversion
  • このフィールドには、パッケージの簡単な説明が表示されます。description
  • このフィールドには、パッケージの責任者の名前と電子メール アドレスを指定します。authors
  • このセクションでは、パッケージが適切に機能するために必要な依存関係を指定します。この例では、パッケージは他の 2 つのパッケージと に依存しています。dependenciesdependency1dependency2

上で説明したように、次のコマンドを実行して編集可能なインストールを実行できます。

pip install -e .

2.3 「追加機能」をインストールする

「エクストラ」と呼ばれる追加の依存関係を必要とするオプション機能がパッケージに含まれている場合に何が起こるかについて話しましょう。

このファイルを使用して依存関係を管理する場合、追加の項目を関数の引数に含めることで指定できます。例えば:setup.pyextras_requiresetup()

setup(
    ...
    extras_require={
        'extra_feature': ['dependency3', 'dependency4']
    }
    ...
)

追加の依存関係をインストールするには、次のコマンドを実行します。

pip install -e .[extra_feature]

                そのファイルを使用している場合は、ファイルのセクションに追加のコンテンツを指定できます。例えば:pyproject.toml[project.extras]

[project.extras]
extra_feature = ["dependency3", "dependency4"]

        次のように、同じコマンドを使用して追加の依存関係をインストールできます。

pip install -e .[extra_feature]

        前述したように、このフラグは「編集可能」を表し、パッケージを「開発者モード」でインストールします。新しいバージョンをリリースする前に変更をテストしたい場合にこれを使用できます。-e

        このフラグはフラグに似ていますが、「dev」アドオンを使用してパッケージをインストールする必要があることも指定します。パッケージ ファイル内で「dev」として指定されている他のパッケージまたは依存関係もインストールされます。これは、運用環境での使用には必要のない開発固有の依存関係をインストールする場合に役立ちます。-e .[dev]-esetup.py

3. Python依存関係管理ツールの置き換え

pip に加えて、Python プロジェクトの依存関係を管理するための代替ツールがあります。そのようなツールの 1 つがです。

Poetry は、Python プロジェクトのパッケージ化および依存関係管理ツールです。Poetry は、バージョン制約の解決や自動仮想環境管理などの機能を備え、pip よりも使いやすいように設計されています。

詩を使用する主な利点の 1 つは、そのシンプルさと使いやすさです。Poetry はプロジェクトの仮想環境を自動的に管理し、各プロジェクトに独自の隔離された環境とその依存関係が確実に存在するようにします。これにより、異なるプロジェクト間でバージョンが競合するリスクが軽減されます。さらに、Poetry は、ファイル内の依存関係とバージョン制約を指定するためのシンプルで簡潔な構文を提供します。pyproject.toml

ただし、詩を使用することにはいくつかの欠点があります。まず、pip ほど広く使用されておらず、広範な Python コミュニティ内で十分にサポートされていない可能性があります。一部の開発者は、pip が提供する、より柔軟でカスタマイズ可能なアプローチを好む場合があります。

4. 仮想環境 (「venvs」とも呼ばれます)

Python の仮想環境は、依存関係の競合の問題に対する解決策を提供します。デフォルトでは、すべての Python パッケージは単一のグローバル名前空間にインストールされるため、単一マシン上の異なるプロジェクト間で互換性の問題が発生し、競合の解決が困難になる可能性があります。

仮想環境は分離された Python 環境を作成し、異なるバージョンの Python とライブラリを相互に干渉することなく個別のプロジェクトで使用できるようにします。

これは、相互に干渉することなく、それぞれに独自のパッケージのセットを持つ複数の仮想環境を同じマシン上に構築できることを意味します。

新しい仮想環境を作成するには、このコマンドを使用できます。たとえば、「myenv」という名前の環境を作成するには、次のコマンドを実行します。python -m venv

python -m venv myenv

5. 注: Python またはpython3

複数のバージョンの Python がインストールされている場合、または Python 2 を使用する古いコードを使用している場合は、使用している Python のバージョンを明示的に参照するコマンドを使用する必要があります。

たとえば、コンピューターに Python 3 が新しくインストールされており、デフォルトで Python 3 を使用している場合、これを明示的に指定する必要はありません。これらのいずれかを使用することも、両方とも Python 3 を参照しているため、使用することもできます。python3python3python

ただし、Python 2 のコード ライブラリを使用する必要があるが、Python 2 と 3 がインストールされている場合は、 を使用すると、コードを中断することなく作業を続けることができます。python

pip を使用してパッケージをインストールする場合も、同じロジックが適用されます。pippip3

仮想環境をアクティブにするには、コマンドの後に環境スクリプトへのパスを指定します。sourceactivate

Linux および macOS では、次を実行します。

source myenv/bin/activate

Windows では、次を実行します。

myenv\Scripts\activate

環境がアクティブ化された後、実行される Python スクリプトまたはコマンドは、システムのグローバル バージョンではなく、virtualenv 内の Python バージョンとライブラリを使用します。

仮想環境を非アクティブにするには、ターミナルを入力するだけです。deactivate

仮想環境をアクティブ化すると、コマンド ライン プロンプトがアクティブなvenvを示すように変更されることがわかります 

myname@mymachine myProject % source myenv/bin/activate
(myenv) myname@mymachine myProject % deactivate
myname@mymachine myProject %

        ベスト プラクティスは、新しいプロジェクトごとに特定の仮想環境を作成し、それをプロジェクトと同じディレクトリに保存することです。これにより管理が容易になり、すべての依存関係がプロジェクト フォルダーに確実に含まれるようになります。

        仮想環境が Git リポジトリ内にある場合は、それをファイルに追加することをお勧めします。これにより、リポジトリをクリーンな状態に保ち、各開発者の仮想環境を GitHub リポジトリから確実に分離できます。.gitignore

 

おすすめ

転載: blog.csdn.net/gongdiwudu/article/details/132758023