Previous Post | Top | Next Post |
TOC
Pythonで書かれたプログラム管理は、Debian供給のdebパッケージを使う限り、 普通にAPTで管理するだけなので簡単です。
一方、ソースからの導入などを考え出すと、Pythonのモジュール管理の変遷もあり結構ややこしいので、ここで復習します。
Python のパッケージの導入
Debian供給のdebパッケージ以外からの導入の基本ルールは、 OS環境をコンタミしないようにするのが賢明です。
具体的には、ソースからバイナリパッケージのwheelを作成しての導入の場合や、 外部レポジトリーのPython Package Indexからの導入の場合のともに、 仮想環境(7) の手法を使って導入という流れです。
Python関連のPython Packaging User Guideからリンクされた
サイトの公式マニュアルにある、python3 -m pip install --upgrade pip setuptools wheel
等のコマンドを、安定版システムで漫然と通常のシェルから実行すると最新版が導入され、
その後のシェル環境からはこちらが優先され実行されるようになり、
干渉するかもしれないので要注意です。
pipをpipxとすれば良いだけですが、気をつけたいところです.
Python のパッケージの作成
また、モジュールパッケージを導入する際に、昔の基本の
distutils
を使おうとすると、最近はマニュアルにLegacy等と書いてあるので
不安になります。当時は、python3 setup.py install ...
等として
いきなりターゲットディレクトリーに書き込みモジュールパッケージを導入
していました。
現在はPython Packaging Authorityのルールに合致させ
Python Package Indexにアップロード出きるようにするには、
distutilsではなく
殆ど変わらない使い勝手のsetuptoolsと
合わせてwheelを用い、setup.py
を作成すれば、
python3 setup.py bdist_wheel
等としてwheel形式でのモジュールパッケージ
出力が難なくできます。
wheel形式でのモジュールパッケージはpipで 扱えます。
ちなみに、distributeは、 setuptoolsにマージされたとか、 setuptoolsが以前使っていた easy_install は非推薦ツールとなり、wheel形式でモジュールパッケージを作成し pipでモジュールパッケージを導入するようになったという、 過去の経緯を理解しないといろんな手法の立ち位置がわかりにくいです。
wheel形式とは、その実体はクロスプラットフォームで一番使われる アーカイブ形式のZIPファイルです。
さらに最近のPEP517に準拠させるには、
別のパッケージ作成インフラを使おうとしないなら、単に
PEP518準拠の、
以下のpyproject.toml
を加えれば充分です。
[build-system]
requires = [
"setuptools>=42",
"wheel"
]
build-backend = "setuptools.build_meta"
ちなみに、Bullseye環境は以下のバージョンですので余裕です。
ii python3-build 0.1.0-3 all Simple, correct PEP517 package builder (Python 3)
ii python3-distutils 3.9.2-1 all distutils package for Python 3.x
ii python3-distutils-extra 2.45 all enhancements to the Python3 build system
ii python3-pip 20.3.4-2 all Python package installer
ii python3-setuptools 52.0.0-3 all Python3 Distutils Enhancements
ii python3-toml 0.10.1-1 all library for Tom's Obvious, Minimal Language - Python 3.x
ii python3-venv 3.9.2-3 amd64 venv module for python3 (default python3 version)
ii python3-wheel 0.34.2-1 all built-package format for Python
ii python3-xdg 0.27-2 all Python 3 library to access freedesktop.org standards
このようにPEP517に準拠させることで、 buildを使ってwheelパッケージが作れるようになります。
作成したモジュールパッケージテストする際には、全てpython3 -m venv ...
を使って作成した仮想化された環境の中でのみ実行することを意識すれば
大きな問題は起きないはずです。
Debianパッケージ作成時に、昔python3 setup.py install --prefix=...
としている辺りが、最新のPEP517に準拠で
setup.py
無しのsetup.cfg
だけの場合などでは
python3 -m build --no-isolation
として行くのかと思います。
(実際には、setup.py
無しはまだ充分サポートされていない感じです。BTS #984824)
具体的にどうなるか等の細かな点は、 Packaging Python Projects を読みながら、後日テストパッケージを作ったりimediffを 今風の twineを用いて更新アップロードして加筆します。
Python パッケージング関連モジュールの開発状況
Python Packaging Authorityのパッケージツールを スターの数順に並べると、アップストリームのパッケージツール開発状況が 感じられます。
Previous Post | Top | Next Post |