現在お買い物カゴには何も入っていません。
タグ: package
Pythonパッケージをソースからインストールする
Gitリポジトリからのpythonパッケージインストール方法
GitHubやその他のバージョン管理システム(VCS)のリポジトリから直接Pythonパッケージをインストールすることができます。これは、まだPyPIに公開されていないパッケージや、最新の開発バージョンを使用したい場合に特に便利です。
Gitリポジトリからpythonパッケージをインストールする方法には、主に2つのアプローチがあります:リモートリポジトリから直接インストールする方法と、ローカルにクローンしたリポジトリからインストールする方法です。
リモートリポジトリから直接インストール
基本的な使用方法
pip install git+https://github.com/username/repository.git
具体的な例
- 公開リポジトリからのインストール:
pip install git+https://github.com/numpy/numpy.git
- 特定のブランチやタグからインストール:
pip install git+https://github.com/username/repository.git@branch-name pip install git+https://github.com/username/repository.git@v1.0
- サブディレクトリにあるパッケージのインストール:
pip install git+https://github.com/username/repository.git#subdirectory=package_dir
プライベートリポジトリからのインストール
プライベートリポジトリからインストールする場合、認証が必要です。
- HTTPSを使用する場合:
pip install git+https://username:password@github.com/username/repository.git
注意: パスワードをコマンドラインに直接入力することは推奨されません。代わりに、個人アクセストークンを使用することをお勧めします。
- 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
ローカルにクローンしたリポジトリからインストール
このアプローチは、リポジトリをローカルマシンにクローンし、そのディレクトリに移動してインストールする方法です。
手順
- リポジトリをクローン:
git clone https://github.com/username/repository.git
- クローンしたディレクトリに移動:
cd repository
- パッケージをインストール:
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。
解決方法
この問題を解決するには、以下の手順を試してください:
- setuptools を最新版にアップグレードする:
pip install --upgrade setuptools
- 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:main
はexample_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の利点
-
ツールの統一:
pyproject.toml
は、ビルドシステムの依存関係やプロジェクトのメタデータを一つのファイルにまとめることができます。これにより、プロジェクトの設定が一元化され、管理が容易になります。 -
ビルドシステムの宣言:
[build-system]
テーブルを使用して、プロジェクトのビルドに必要なツールや依存関係を明示的に宣言できます。これにより、ビルド環境の再現性が向上します。 -
ツール間の互換性:
pyproject.toml
は、setuptools
、poetry
、flit
などの異なるビルドツールと互換性があります。これにより、特定のツールに依存せずにプロジェクトを管理できます。
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へのパッケージ登録手順
-
TestPyPIでのテスト:
- TestPyPIにアカウントを作成し、APIトークンを取得します。
- パッケージをビルドし、TestPyPIにアップロードしてテストします。
-
APIトークンの取得:
- PyPI(またはTestPyPI)のアカウント設定からAPIトークンを生成します。
-
.pypircファイルの設定:
- ホームディレクトリに
.pypirc
ファイルを作成し、以下のように設定します:
- ホームディレクトリに
[distutils] index-servers = pypi testpypi [pypi] username = __token__ password = <Your-PyPI-API-token> [testpypi] username = __token__ password = <Your-TestPyPI-API-token>
- パッケージのビルドとアップロード:
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を使用してパッケージを作成・配布する方法も紹介しました。
パッケージ管理
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ツール
- App Center(Ubuntu):
Show Appsから「アプリセンター」を開き、検索、インストール、削除が可能です。 - 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でアプリセンターを開くには、以下の手順を行います:
- 画面左下のShow Apps(アプリケーションを表示)ボタンをクリックします。
- 検索バーに「アプリセンター」または「App Center」と入力します。
- 表示されたアイコンをクリックしてアプリセンターを起動します。
アプリセンターでは、ソフトウェアの検索、インストール、更新、削除などの操作を簡単に行うことができます。
まとめ
これらのツールを使用することで、Debian、Ubuntu、およびFedoraでのパッケージ管理を効率的に行うことができます。GUIツールは初心者にとって使いやすい一方、コマンドラインツールはより詳細な制御と自動化が可能です。
- App Center(Ubuntu):