昨今のPythonのパッケージ管理事情?
すごく、久しぶりのPythonネタです。
昨今のPython事情があまりよくわかっていないのですが、パッケージ管理ツール、仮想環境といろいろあるようでして…。
パッケージ管理については、このまとめがわかりやすかったです。
Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc)
あと、こちら。
pip vs easy_install — Python Packaging User Guide
今は、pipが主流なんですねぇ(easy_installくらいまでしか馴染みがない…)。
Python モジュールのインストール — Python 3.6.8 ドキュメント
pipはライブラリをグローバルにインストールするため、それをプロジェクトなどの単位で切り替えられるようにする仕組みが、
仮想環境のようです。
※使用するPythonのバージョンは、仮想環境を作成したPythonのバージョンで固定されるそうな
28.3. venv --- 仮想環境の作成 — Python 3.6.8 ドキュメント
venvっていうらしいですね。前身はvirtualenvで、Python 3.4でPython本体に入ったみたいですね。
というわけで、インストールして、少し試してみたいと思います。
環境
環境は、Ubuntu Linux 18.04 LTS。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.1 LTS Release: 18.04 Codename: bionic
pipおよびvenvは、パッケージインストールすることにします。
Installing pip/setuptools/wheel with Linux Package Managers — Python Packaging User Guide
以下で、pipもvenvも(一緒にsetuptoolsも)インストールされます。
$ sudo apt install python3-venv python3-pip
バージョン確認。
## Python $ python3 -V Python 3.6.7 ## pip $ pip3 -V pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6) ## venv $ apt show python3-venv Package: python3-venv Version: 3.6.7-1~18.04 〜省略〜
これで、インストールは完了です。
仮想環境を作成してみる
というわけで、venvを使ってみましょう。
ドキュメントに習い、venvをモジュール指定して仮想環境を作成します。作成する環境の名前も、「venv」とします。
$ python3 -m venv venv
これで、「venv」というディレクトリができます。
「ls -l」してみると、すでにいろいろできています…。
$ ls -l venv 合計 20 drwxrwxr-x 2 xxxxx xxxxx 4096 1月 9 23:02 bin drwxrwxr-x 2 xxxxx xxxxx 4096 1月 9 23:02 include drwxrwxr-x 3 xxxxx xxxxx 4096 1月 9 23:02 lib lrwxrwxrwx 1 xxxxx xxxxx 3 1月 9 23:02 lib64 -> lib -rw-rw-r-- 1 xxxxx xxxxx 69 1月 9 23:02 pyvenv.cfg drwxrwxr-x 3 xxxxx xxxxx 4096 1月 9 23:02 share
仮想環境を有効化するには、作成した仮想環境内のbinディレクトリにある、activateスクリプトを実行するようです。
$ source venv/bin/activate (venv) $
すると、ターミナルの表記がちょっと変わります。
この状態で、たとえばnumpyをインストールしてみます。
$ pip3 install numpy
こうすると、作成した仮想環境の「lib/pythonN/site-packages」配下にインストールされます、と。
$ ls -l venv/lib/python3.6/site-packages 合計 40 drwxrwxr-x 2 xxxxx xxxxx 4096 1月 9 23:02 __pycache__ -rw-rw-r-- 1 xxxxx xxxxx 126 1月 9 23:02 easy_install.py drwxrwxr-x 18 xxxxx xxxxx 4096 1月 9 23:06 numpy drwxrwxr-x 2 xxxxx xxxxx 4096 1月 9 23:06 numpy-1.15.4.dist-info drwxrwxr-x 11 xxxxx xxxxx 4096 1月 9 23:02 pip drwxrwxr-x 2 xxxxx xxxxx 4096 1月 9 23:02 pip-9.0.1.dist-info drwxrwxr-x 5 xxxxx xxxxx 4096 1月 9 23:02 pkg_resources drwxrwxr-x 2 xxxxx xxxxx 4096 1月 9 23:02 pkg_resources-0.0.0.dist-info drwxrwxr-x 6 xxxxx xxxxx 4096 1月 9 23:02 setuptools drwxrwxr-x 2 xxxxx xxxxx 4096 1月 9 23:02 setuptools-39.0.1.dist-info
現在の仮想環境にインストールされているパッケージを確認するには、「pip3 freeze」で、と。
$ pip3 freeze numpy==1.15.4 pkg-resources==0.0.0
なるほどー。
この仮想環境を終了する時はdeactivateで行い、
$ deactivate
仮想環境自体が不要になったのなら、削除すればOKです。
$ rm -r venv
仮想環境は削除しなくても、仮想環境の中身をクリーンにしたい場合は「--clear」で。この時、deactivateしておく必要があります。
$ python3 -m venv --clear venv
他の環境で、インストールしたパッケージを再現したい場合は?
通常、インストールしたパッケージのバージョンを出力する「pip3 freeze」の結果を「requirements.txt」という
名前のファイルに保存し
$ pip3 freeze > requirements.txt
「pip3 install」時に、「-r」オプションで指定してインストールするらしいです。
$ pip3 install -r requirements.txt
なんとなく、使い方はわかりました、と。
ちなみに、仮想環境中のPythonのバージョンは、こんな感じで固定される…?
※現在参照しているPythonバイナリへのリンクが作成される、ということかな?
$ ls -l venv/bin 合計 32 -rw-r--r-- 1 xxxxx xxxxx 2225 1月 9 23:35 activate -rw-r--r-- 1 xxxxx xxxxx 1281 1月 9 23:35 activate.csh -rw-r--r-- 1 xxxxx xxxxx 2445 1月 9 23:35 activate.fish -rwxrwxr-x 1 xxxxx xxxxx 279 1月 9 23:35 easy_install -rwxrwxr-x 1 xxxxx xxxxx 279 1月 9 23:35 easy_install-3.6 -rwxrwxr-x 1 xxxxx xxxxx 251 1月 9 23:35 pip -rwxrwxr-x 1 xxxxx xxxxx 251 1月 9 23:35 pip3 -rwxrwxr-x 1 xxxxx xxxxx 251 1月 9 23:35 pip3.6 lrwxrwxrwx 1 xxxxx xxxxx 7 1月 9 23:35 python -> python3 lrwxrwxrwx 1 xxxxx xxxxx 16 1月 9 23:35 python3 -> /usr/bin/python3
Python自体のバージョンを切り替えるには?
ここまでの話は、Pythonのパッケージに関する管理方法です。
Python自体のバージョンを切り替えるようなツールは、pyenvがあるそうです。