現在お買い物カゴには何も入っていません。
タグ: build system
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"