タグ: package

  • Pythonパッケージをソースからインストールする

    Gitリポジトリからのpythonパッケージインストール方法

    GitHubやその他のバージョン管理システム(VCS)のリポジトリから直接Pythonパッケージをインストールすることができます。これは、まだPyPIに公開されていないパッケージや、最新の開発バージョンを使用したい場合に特に便利です。

    Gitリポジトリからpythonパッケージをインストールする方法には、主に2つのアプローチがあります:リモートリポジトリから直接インストールする方法と、ローカルにクローンしたリポジトリからインストールする方法です。

    リモートリポジトリから直接インストール

    基本的な使用方法

    pip install git+https://github.com/username/repository.git

    具体的な例

    1. 公開リポジトリからのインストール:
    pip install git+https://github.com/numpy/numpy.git
    1. 特定のブランチやタグからインストール:
    pip install git+https://github.com/username/repository.git@branch-name
    pip install git+https://github.com/username/repository.git@v1.0
    1. サブディレクトリにあるパッケージのインストール:
    pip install git+https://github.com/username/repository.git#subdirectory=package_dir

    プライベートリポジトリからのインストール

    プライベートリポジトリからインストールする場合、認証が必要です。

    1. HTTPSを使用する場合:
    pip install git+https://username:password@github.com/username/repository.git

    注意: パスワードをコマンドラインに直接入力することは推奨されません。代わりに、個人アクセストークンを使用することをお勧めします。

    1. SSHを使用する場合:
    pip install git+ssh://git@github.com/username/repository.git

    SSHキーの設定が必要です。

    requirements.txtでの使用

    requirements.txtファイルでGitHubリポジトリを指定することもできます:

    git+https://github.com/username/repository.git@v1.0

    ローカルにクローンしたリポジトリからインストール

    このアプローチは、リポジトリをローカルマシンにクローンし、そのディレクトリに移動してインストールする方法です。

    手順

    1. リポジトリをクローン:
    git clone https://github.com/username/repository.git
    1. クローンしたディレクトリに移動:
    cd repository
    1. パッケージをインストール:
    pip install .

    具体的な例

    git clone https://github.com/username/my-project.git
    cd my-project
    pip install .

    開発モードでのインストール

    パッケージを開発中で、ソースコードを編集しながらテストしたい場合は、開発モードでインストールすることができます:

    pip install -e .

    -eオプション(または--editable)を使用すると、パッケージがソースディレクトリにリンクされ、ソースコードの変更がすぐに反映されます。

    注意点

    • どちらの方法でも、リポジトリにはsetup.pyまたはpyproject.tomlファイルが含まれている必要があります。
    • ローカルにクローンする方法は、パッケージのソースコードを確認したり、修正を加えたりする場合に特に便利です。
    • 開発モードでのインストールは、自作のパッケージを開発する際に非常に有用です。
    • セキュリティ上の理由から、信頼できるソースからのみインストールしてください。
    • 依存関係の管理に注意が必要です。特に、複数のプロジェクトで作業している場合は、仮想環境の使用を検討してください。

    まとめ

    GitリポジトリからPythonパッケージをインストールする方法は、開発中のパッケージや、まだPyPIに公開されていないパッケージを使用する際に非常に便利です。リモートからの直接インストールとローカルにクローンしてからのインストールの両方の方法を理解しておくことで、様々な状況に対応できます。

    Citations:
    [1] Python のビルドとテスト
    [2] Python配布パッケージをGitHubリポジトリ経由でインストールする方法(PublicとPrivate両パターン)
    [3] setup.pyのないGitHubリポジトリからライブラリをimportする方法
    [4] GitHub のプライベートリポジトリから Python の独自パッケージをインストールしてみた
    [5] 【Python】GitHubから直接パッケージをインストールする方法
    [6] GitHub のリポジトリを requirements.txt に含める

  • Python 3.12でのパッケージング手法の変更

    Python 3.12におけるパッケージングの変更と pandas_datareader のインストール問題

    Python 3.12では、パッケージングシステムに大きな変更が加えられました。これにより、一部のライブラリのインストールに影響が出ています。特に pandas_datareader のインストール時に遭遇する可能性のあるエラーと、その解決方法について説明します。

    pandas_datareader のインストール問題

    Python 3.12で pandas_datareader をインストールしようとすると、以下のようなエラーが発生する可能性があります:

    ModuleNotFoundError: No module named 'distutils'

    このエラーは、Python 3.12で setuptools が必要になったことが原因です。setuptools は以前は distutils モジュールに依存していましたが、Python 3.12ではこのモジュールが削除されました1

    解決方法

    この問題を解決するには、以下の手順を試してください:

    1. setuptools を最新版にアップグレードする:
    pip install --upgrade setuptools
    1. pandas_datareader をインストールする:
    pip install pandas_datareader

    Numpy のビルドシステム変更

    Python 3.12では、Numpy のようなライブラリでもビルドシステムの変更が行われています。Numpy は Python 3.12 でデフォルトのビルドシステムを meson build system に移行しました2。これにより、setuptools の使用は非推奨となり、将来的には廃止される予定です。

    pyproject.toml の推奨

    パッケージングで pyproject.toml が強く推奨されている理由の一つは、このようなビルドシステムの変更に対応するためです。pyproject.toml を使用することで、プロジェクトのビルドシステムやその依存関係を明確に指定できます。

    以下は pyproject.toml の簡単な例です:

    [build-system]
    requires = ["setuptools>=61.0", "wheel"]
    build-backend = "setuptools.build_meta"
    
    [project]
    name = "example_project"
    version = "0.1.0"
    description = "An example project"
    dependencies = [
        "pandas",
        "numpy",
    ]
    
    [project.scripts]
    my-script = "example_project.cli:main"

    console_scripts と名前空間

    pyproject.toml の [project.scripts] セクション(または setup.py の entry_points)で指定される console_scripts は、モジュールパスとコロンで区切られた関数名を使用します。

    例えば、example_project.cli:mainexample_project/cli.py ファイル内の main() 関数を指しています。

    この指定方法はクラス定義内のメソッドにも適用できます。例えば:

    class CLI:
        @staticmethod
        def main():
            print("Hello from CLI!")

    この場合、pyproject.toml では以下のように指定できます:

    [project.scripts]
    my-script = "example_project.cli:CLI.main"
  • Pythonのパッケージの作成と登録

    setup.pyとpyproject.tomlの関係

    setup.pyとpyproject.tomlの役割

    setup.pyは長い間、Pythonパッケージのビルドと配布のための標準的な設定ファイルとして使用されてきました。しかし、近年ではpyproject.tomlが推奨されています。pyproject.tomlは、パッケージングツールやその他のツールの設定を一元管理するためのファイルです。

    pyproject.tomlの利点

    1. ツールの統一:
      pyproject.tomlは、ビルドシステムの依存関係やプロジェクトのメタデータを一つのファイルにまとめることができます。これにより、プロジェクトの設定が一元化され、管理が容易になります。

    2. ビルドシステムの宣言:
      [build-system]テーブルを使用して、プロジェクトのビルドに必要なツールや依存関係を明示的に宣言できます。これにより、ビルド環境の再現性が向上します。

    3. ツール間の互換性:
      pyproject.tomlは、setuptoolspoetryflitなどの異なるビルドツールと互換性があります。これにより、特定のツールに依存せずにプロジェクトを管理できます。

    setup.pyは不要か?

    新しいプロジェクトでは、pyproject.tomlを使用することが強く推奨されています。特に、ビルド中にカスタムスクリプトを実行する必要がない場合、setup.pyは最小限のスタブとしてのみ使用されるべきです。具体的には、以下のように最小限のsetup.pyを使用できます:

    # setup.py
    import setuptools
    setuptools.setup()

    具体的な設定例

    以下に、pyproject.tomlの具体的な設定例を示します:

    [build-system]
    requires = ["setuptools", "wheel"]
    build-backend = "setuptools.build_meta"
    
    [project]
    name = "your-package-name"
    version = "0.1.0"
    description = "A short description of your package"
    authors = [
        { name = "Your Name", email = "your.email@example.com" }
    ]
    dependencies = [
        "requests >= 2.0.0",
        "numpy >= 1.18.0"
    ]
    
    [tool.black]
    line-length = 88

    PyPIへのパッケージ登録手順

    1. TestPyPIでのテスト:

      • TestPyPIにアカウントを作成し、APIトークンを取得します。
      • パッケージをビルドし、TestPyPIにアップロードしてテストします。
    2. APIトークンの取得:

      • PyPI(またはTestPyPI)のアカウント設定からAPIトークンを生成します。
    3. .pypircファイルの設定:

      • ホームディレクトリに.pypircファイルを作成し、以下のように設定します:
    [distutils]
    index-servers =
        pypi
        testpypi
    
    [pypi]
    username = __token__
    password = <Your-PyPI-API-token>
    
    [testpypi]
    username = __token__
    password = <Your-TestPyPI-API-token>
    1. パッケージのビルドとアップロード:
      • python -m buildコマンドでパッケージをビルドします。
      • python -m twine upload --repository testpypi dist/*でTestPyPIにアップロードします。
      • テストが成功したら、python -m twine upload dist/*で本番のPyPIにアップロードします。

    まとめ

    最新の情報では、pyproject.tomlが推奨されています。特に新しいプロジェクトでは、pyproject.tomlを使用することで、設定の一元管理やビルド環境の再現性が向上します。setup.pyは最小限のスタブとして使用し、主要な設定はpyproject.tomlに記述することが推奨されます。

    Citations:
    [1] Pythonで自作ライブラリを作るとき、setup.pyに代えてpyproject.tomlを使ってみませんか?
    [2] pyproject.toml を書く
    [3] Should pyproject.toml configs always be required to use poetry? #3443
    [4] Should I be using only pyproject.toml? [closed]
    [5] pyproject.toml specification

  • Pythonの仮想環境(venv)とパッケージ管理(pip)の基本

    1. 仮想環境(venv)とは

    仮想環境は、プロジェクトごとに独立したPython環境を作成するためのツールです。これにより、異なるプロジェクトで異なるバージョンのパッケージを使用することができます。

    2. 仮想環境の作成と使用

    仮想環境の作成

    # プロジェクトディレクトリに移動
    cd my_project
    
    # 仮想環境の作成
    python3 -m venv venv

    仮想環境の有効化

    # Unix/macOS
    source venv/bin/activate
    
    # Windows
    venv\Scripts\activate

    仮想環境の無効化

    deactivate

    3. パッケージ管理(pip)

    pipの基本

    pipはPythonのパッケージ管理ツールで、パッケージのインストール、アップグレード、アンインストールを行います。

    パッケージのインストール

    pip install package_name

    パッケージのアップグレード

    pip install --upgrade package_name

    パッケージのアンインストール

    pip uninstall package_name

    インストール済みパッケージの一覧表示

    pip list

    パッケージの詳細情報

    pip show package_name

    4. requirements.txtの使用

    requirements.txtの作成

    プロジェクトで使用しているパッケージを一覧にして、他の開発者が同じ環境を再現できるようにします。

    pip freeze > requirements.txt

    requirements.txtからパッケージをインストール

    pip install -r requirements.txt

    5. パッケージの作成と配布

    パッケージの構成

    以下では従来の方法を説明します。強く推奨されているpyproject.tomlについては1別の機会に説明します。

    パッケージを作成するためには、以下のようなディレクトリ構造が必要です:

    my_package/
    ├── my_package/
    │   ├── __init__.py
    │   └── module.py
    ├── setup.py
    └── README.md

    setup.pyの例

    通常、ソフトウェアの開発はパッケージのビルドを前提としているファイルとパスの構成になっていますので、GitHub等で参考となるプロジェクトの書き方を手本とするのが早道です。参考になるかどうかはわかりませんが、私の管理するプロジェクトのレポジトリはこちらです。

    console_scriptsは、例えばLinuxならばシェルコマンドとして動作します。仮想環境が~/.venv3.12ならば、~/.venv3.12/bin/以下にインストールされます。コマンドとして呼び出したい関数を指定します2

    from setuptools import setup, find_packages
    
    setup(
        name='my_package',
        version='0.1',
        packages=find_packages(),
        install_requires=[
            'requests',
        ],
        entry_points={
            'console_scripts': [
                'my_command=my_package.module:main',
            ],
        },
    )

    パッケージのビルドと配布

    Pythonパッケージユーザーガイド(Python Packaging User Guide)をまず読みましょう。以下のコマンドでは非推奨となった方法も併記します3

    # パッケージのビルド(非推奨となった。旧式)
    python setup.py sdist bdist_wheel
    
    # 推奨
    python -m build
    
    # PyPIにアップロードするためのツールをインストール
    pip install twine
    
    # パッケージのアップロード
    twine upload dist/*

    6. Gitと仮想環境の管理

    .gitignoreの設定

    仮想環境のディレクトリをGitの管理対象から除外するために、.gitignoreファイルに以下を追加します。GitHubからコピーしてくると良いでしょう4

    venv/

    まとめ

    この記事では、Pythonの仮想環境(venv)とパッケージ管理(pip)の基本的な使用方法について説明しました。仮想環境を使用することで、プロジェクトごとに独立した環境を作成し、依存関係の管理が容易になります。また、pipを使用してパッケージのインストールや管理を行うことで、開発効率を向上させることができます。さらに、requirements.txtを使用して環境を再現可能にし、setup.pyを使用してパッケージを作成・配布する方法も紹介しました。

    1. どうすれば setup.py ベースのプロジェクトを近代化できるでしょうか? ↩︎
    2. 9.2. Python のスコープと名前空間 ↩︎
    3. setup.py は非推奨になりましたか? ↩︎
    4. Python.gitignore ↩︎
  • パッケージ管理

    Debian/Ubuntuのパッケージ管理

    Debian系ディストリビューション(DebianとUbuntu)では、主に以下のパッケージ管理ツールが使用されています。

    パッケージのインストールにはroot権限が必要です。以前の記事でも触れましたが、Debianの初期設定ではsu -lでrootユーザーとして実行します。以下はUbuntuでの例です。

    APT (Advanced Package Tool)

    パッケージのインストール:

    sudo apt install パッケージ名

    パッケージの削除。後者はホームディレクトリ下を除く設定ファイル等も削除する:

    sudo apt remove パッケージ名
    sudo apt purge パッケージ名

    パッケージリストの更新。インストール前やアップグレード前に行う:

    sudo apt update

    システム全体のアップグレード:

    sudo apt upgrade

    パッケージの削除を伴うシステム全体のアップグレード:

    sudo apt full-upgrade

    パッケージの検索:

    apt search 正規表現

    パッケージの情報取得:

    apt show パッケージ名

    dpkg

    低レベルのパッケージ管理ツールです。

    .debファイルのインストール:

    sudo dpkg -i パッケージ名.deb

    インストールされたパッケージの一覧表示:

    dpkg -l

    パッケージ名に含まれるファイル一覧:

    dpkg -L パッケージ名
    dpkg --listfiles パッケージ名

    ファイルがどのパッケージに含まれるか検索:

    dpkg -S filename-search-pattern
    dpkg --search filename-search-pattern

    Snap

    Ubuntuで導入されたパッケージ管理システムです。coreで始まるものはbase snapで、各パッケージを動かすのに必要です。その番号はUbuntuリリースのバージョンを表します。

    Snapパッケージのインストール:

    sudo snap install パッケージ名

    インストールされたSnapの一覧表示:

    snap list

    Snapパッケージの更新:

    sudo snap refresh パッケージ名

    GUIツール

    1. App Center(Ubuntu):
      Show Appsから「アプリセンター」を開き、検索、インストール、削除が可能です。
    2. Synaptic Package Manager:
      より詳細な操作が可能なGUIツールです。
    sudo apt install synaptic

    でインストールできます。

    Fedoraのパッケージ管理

    Fedoraでは、主にDNF (Dandified Yum) を使用します。

    パッケージのインストール:

    sudo dnf install パッケージ名

    パッケージの削除。eraseというエイリアスは廃止された1:

    sudo dnf remove パッケージ名

    パッケージリストの更新:

    sudo dnf check-update

    システム全体のアップグレード:

    sudo dnf upgrade

    RPM (Red Hat Package Manager)

    低レベルのパッケージ管理ツールです。

    .rpmファイルのインストール:

    sudo rpm -i パッケージ名.rpm

    インストールされたパッケージの一覧表示:

    rpm -qa

    GUIツール

    Debian、FedoraなどのGNOMEを採用しているLinuxディストリビューションでは、GNOME Softwareがデフォルトのグラフィカルパッケージマネージャーとして使用されています。GNOME Softwareは、ソフトウェアのインストール、更新、削除を簡単に行えるGUIツールです。

    Ubuntuに関しては、以前はUbuntu Softwareが使用されていましたが、最新のバージョンではApp Center(アプリセンター)に変更されています。英語版では「App Center」、日本語版では「アプリセンター」と表示されます。

    Ubuntuでアプリセンターを開くには、以下の手順を行います:

    1. 画面左下のShow Apps(アプリケーションを表示)ボタンをクリックします。
    2. 検索バーに「アプリセンター」または「App Center」と入力します。
    3. 表示されたアイコンをクリックしてアプリセンターを起動します。

    アプリセンターでは、ソフトウェアの検索、インストール、更新、削除などの操作を簡単に行うことができます。

    まとめ

    これらのツールを使用することで、Debian、Ubuntu、およびFedoraでのパッケージ管理を効率的に行うことができます。GUIツールは初心者にとって使いやすい一方、コマンドラインツールはより詳細な制御と自動化が可能です。

    1. dnf(8) — Linux manual page ↩︎