2018-11-19 :-|
_ 労
ストレージ労
_ [Pythn][pip][deb][ubuntu][debian]Pythn pip パッケージから Ubuntu パッケージを作る
ubuntu というか debian というか。
作れることは作れますが、Ubuntu パッケージのフォーマットのファイル構造を生成する、という感じです。必要な依存関係は別途自分で control に書いたり、システムによってはビルド方法が異なるので rules を修正したり、手動での調整が必要です。pkgtools/url2pkg のような感じですね。
ただ、ここで使用している stdeb は最後に リリース されたのが 2015 年だし、issue も数年間放置されています。もはやメンテナンスされてないかもしれず。
準備
py2dsc をインストールする。
sudo pip install stdeb
ubuntu のバージョンによるが、stdeb は古いやつだと Python3 向けパッケージを作れないので、今回は pip で最新をインストールした。
例
python-lazy-object-proxy https://github.com/ionelmc/python-lazy-object-proxy を Ubuntu パッケージにしてみる。
zip または tar.gz が必要なので、pip からダウンロードできるならそれを使う。今回は都合により古いバージョンを扱いたいので、github リポジトリ(pip のページからリンクされてる)からダウンロードするたとえばこのバージョンをパッケージ化してみる。
https://github.com/ionelmc/python-lazy-object-proxy/releases/tag/v1.2.1
% curl -O -L https://github.com/ionelmc/python-lazy-object-proxy/archive/v1.2.1.tar.gz
deb パッケージを作ります。なお python2 向けパッケージか python3 向けパッケージが作られるかは、使っている python のバージョンに依存するので注意。上書きしたい場合は --with-ナントカ で指定します。
Python 3 support
By default, only packages are built for the version of Python being used. To override this, use --with-python2=True or --with-python3=True as an argument to the sdist_dsc distutils command (or use both to be sure).
こんな感じで。
% py2dsc --with-python3=True python-lazy-object-proxy-1.2.1.tar.gz
ubuntu の場合は python2 は pip2 、python3 は pip3 というコマンドが入るので、python3 向けパッケージだけ作りたい場合は pip3 install と、明示的に実行すればよさそう。
deb_dist というディレクトリが作られる。中身は Ubuntu パッケージが出来上がってますね。3 つのファイルが Ubuntu パッケージです。
% ls -1 deb_dist lazy-object-proxy-1.2.1 lazy-object-proxy_1.2.1-1.debian.tar.gz ←これ lazy-object-proxy_1.2.1-1.dsc ←これ lazy-object-proxy_1.2.1-1_source.changes lazy-object-proxy_1.2.1.orig.tar.gz ←これ
これを用いて deb ファイルを作ります。
% cd lazy-object-proxy-1.2.1 % debuild -us -uc
なお事前に dch をやっておくと、Changelog を編集できます。hogehoge はパッケージ名に反映されます。
dch --local hogehoge
debuild を実行します。怒られました。
% debuild -us -uc dpkg-buildpackage -rfakeroot -D -us -uc dpkg-buildpackage: source package astroid dpkg-buildpackage: source version 1.3.8-1 dpkg-buildpackage: source distribution unstable dpkg-buildpackage: source changed by Logilab <pylint-dev@lists.logilab.org> dpkg-source --before-build astroid-1.3.8 dpkg-buildpackage: host architecture amd64 dpkg-source: info: using options from astroid-1.3.8/debian/source/options: --extend-diff-ignore=\.egg-info$ dpkg-checkbuilddeps: Unmet build dependencies: python3-all dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting dpkg-buildpackage: warning: (Use -d flag to override.) debuild: fatal error at line 1364: dpkg-buildpackage -rfakeroot -D -us -uc failed
python3-all なんて知らねえよと言ってます。
Ubuntu パッケージで python3-all をインストールしてない場合は怒られます。python3 しかインストールしてないので、control を書き換えます。
変更前
Build-Depends: python-setuptools (>= 0.6b3), python3-setuptools, python-all (>= 2.6.6-3), python3-all, debhelper (>= 7)
変更後
Build-Depends: python-setuptools (>= 0.6b3), python3-setuptools, python (>= 2.6.6-3), python3, debhelper (>= 7)
再度実行
% debuild -us -uc
deb が出来上がりました。
% cd .. % ls -1 astroid-1.3.8 astroid_1.3.8-1.debian.tar.gz astroid_1.3.8-1.dsc astroid_1.3.8-1_amd64.build astroid_1.3.8-1_amd64.changes astroid_1.3.8-1_source.changes astroid_1.3.8.orig.tar.gz python-astroid_1.3.8-1_all.deb python3-astroid_1.3.8-1_all.deb ←これ