お茶漬けびより

学んだことを整理する場所です。主に、C++, Unreal Engine 4 (UE4) を扱っていました。最近は、仕事方面で使っている言語やツールを紹介したいと思います。たまに趣味や雑記も。

Python のパッケージ管理ツールの簡単なまとめ

f:id:pickles-ochazuke:20180207224258j:plain

最近寒すぎて歩くのがつらく、走って帰っています(これはこれでつらい)。
Python を始めてまだ1ヶ月か2ヶ月ほどですが、始めたときに???ってなったことをちまちまと整理していきます。

今回は、パッケージ管理ツールの回りをまとめたいと思います。
先に断っておくと、詳しい話は他の詳しい方に任せてます。自分と同じように Python 始めたけど専門用語が飛び交いすぎて訳が分からない!となっている人に向けて、道しるべになるような簡単な解説にとどめたいと思っています。

パッケージングツールとパッケージインストーラ

パッケージ管理ツールを大きく分けるとパッケージングツールとパッケージインストーラの二つになります。

  • パッケージングツール
    自作したライブラリを外部へ配布する際に使用するツール。PyPI で配布されているパッケージは、全てパッケージングツールを使ってパッケージ化されたものです。ツールは複数あり、 wheel, setup.py sdist(コマンド), setuptools, distutils, distribute などがこちらに当たります。現在は、wheel が普及しています。

  • パッケージインストーラ
    PyPI などで公開されているパッケージをインストールするためのツール。一度は使ったことがあるかもしれません。pip, easy_install などがこちらに当たります。現在は pip が普及しています。easy_install は、setuptools のコマンドラインツールだそうです。

パッケージングツールは複数あります。現在使われているのは、 wheel ですが、そこまで行き着くのにややこしい問題があったようです。特にややこしいのは、setuptools と distribute です。setuptools が登場し(2011年?)、そのフォーク(派生のようなもの)が distribute です(2012年?)。一時期は distribute を使うべきでしたが、2013年に setuptools にマージされます(がっちゃんこ)。

Python 3.3 までは pip がスタンダードで入っていなかったので自分で入れる必要がありました。そのため、setuptools (easy_install)を使って pip を入れていた時期があったようです。3.4 では pip は標準で入っていますので、setuptools(easy_install) を触る必要はありません。

distutils は、標準のパッケージ管理ツール(パッケージングもインストールも可能)です。setuptools や pip はこれを拡張したものだそうです。

さて、整理しましょう。最新の Python(3.4 以上)であれば、インストールするものは wheel だけです。そしてパッケージをインストールする際は、pip を使いましょう。以上です。

パッケージの配布形式

wheelegg です。
昔は egg が使われていましたが、この egg にはいろいろ使いにくいところがありました。それを解決するために現れたのが wheel です。現在では、wheel が一般的に使われています。wheel 形式でパッケージするには、同じ名前のパッケージングツール wheel を使います。

異端児 Anaconda

(実際に使ったことがありませんので、間違いがあるかも……)
さて、さっきまで pip と wheel だけを使えば問題ないよと書いてきました。しかし、この Anaconda というやつには conda という便利なツールが存在します。こいつは、パッケージの管理と 仮想環境管理とバージョン管理が出来るようです。つまり pip, pyenv, virualenv の代わりを一人で担っています。また、パッケージングも行えます。ただし、wheel との互換性はないようです。研究で使う分には問題ないですが、開発となると今後扱いづらいかもしれません。

おわりに

パッケージ管理ツールをまとめると、通常は pip, wheel を使えばいいですが、考えるのが面倒くさい、さっさとコードを書く必要があるという人は、Anaconda をインストールして conda を使うという感じでしょうか。または、Anaconda でも pip は使えるので、パッケージ管理やパッケージングは、pip, wheel を使う(それ以外の環境回りは conda を使う)というのがいいかもしれません。

以上、つたない内容でしたが理解の一助になれば幸いです。

参考資料

歴史的な詳しい解説があります。とても参考になりました。 ymotongpoo.hatenablog.com

Anaconda(conda)の使い方が解説されています。 qiita.com

ちょっと情報が古いですが、よくまとまっているので、かなり参考になります。
Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc)