Anacondaに頼らない、pipとvenvを用いたPython環境の構築

最近、Pythonに触れることが多くなってきました。
その中で、環境構築についていろいろ学んできました。

Pythonの参考書の多くは”Anacondaで環境構築しましょう”と書いてあります。
しかし、Anacondaはセットアップファイルだけで4GBもあります。
また、自分のシステムに既に入っているPythonとの相互関係も最初の頃はよくわからなくなります。

Anacondaを横においておくと、Pythonには、パッケージマネージャーとして、”pip” というものがあります。
これも若干クセがあるので、いくつかおさえておくべきことがあります。

さらに、Pythonは”venv”というパッケージを使うことで、仮想環境を簡単に構築できます。
このvenvについて把握すると、Anacondaなどのことも理解しやすくなります。

ということで、私なりに理解したことをここでまとめていきたいと思います。
なお、ここではすべてPython3環境を意識していきます。pipはmacOSやUbuntuでは全部Python3になっています。DebianではPython2のようですが、最近、Debianを使っていないのでよくわかりません。(man pip に書いてある情報から記載しただけです)

現時点での私のおすすめは、
「基本、–userをつけてpipでインストール。試験的に試したかったらvenvで仮想環境内で構築」です。

概要は以下になります。

  1. pip
    1.1 どのpipを使っているかの確認
    1.2 システムへのインストールと個別ユーザーへのインストール

  2. venv
    2.1 仮想環境の構築
    2.2 仮想環境の有効化
    2.3 仮想環境の無効化

pip

どのpipを使っているかの確認

いろいろなソフトを入れていると、ひとつのPCの中にいくつものPythonがインストールされていることがよくあります。脳画像解析では、最近、FSLもFreeSurferも独自のPythonをシステムの中にいれています。Anacondaなどを使われていると、さらにもうひとつのPythonも入っています。なので、Pythonで何か変な動きが起きているなと思った時は、まず、「どこにあるコマンドを使っているんだろう」という発想が大事になります。

それでは、どの pip を使っているかを確認しましょう。

which pip

私の場合は以下のようになりました。

$ which pip
/usr/local/bin/pip

システムのpipを使っているようです。
次にバージョンも確認します。

$ pip --version
pip 21.0.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)

システムにある Python3.6に入っている pip 21.0.1 を使っているということがわかります。

ちなみに、Ubuntuでは、pipを使っていると以下のようなWARNINGが出ることがあります。

WARNING: You are using pip version 21.0.1; however, version 21.3.1 is available.
You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.

これはsudoを使って実行しないように注意してください。これに従ってそのままやるとシステムが壊れることがあります。私は昔、散々な目にあいました。(そしてこのようなブログ記事を書くに至っています)

Ubuntuでは、aptによって管理されるパッケージと、pipによって管理されるパッケージがあります。aptによって管理されているパッケージをpipでアップグレードしようとするとはまることがありますのでご注意ください。

システムへのインストールと個別ユーザーへのインストール

pipを使う時、インストールは

pip install パッケージ名

なのですが、システムにインストールするのとユーザー環境にインストールするのでコマンドが若干変わります。

ユーザー環境へのインストール(デフォルト)

ユーザー環境にインストールする場合は以下のようにしますが、最近の pip はデフォルトでユーザー環境にインストールします。

pip install パッケージ名 --user

この時、以下にインストールされます。

  • コマンド
    ~/.local/bin
    
  • パッケージそのもの
    ~/.local/lib/python3.X/site-packages
    

システムへのインストール(わかっている人のみ)

sudo -H をつけると、システムにインストールされますが、これはシステムを壊す可能性があるため、リスクをわかっている人のみ使ってください。sudo -H だと、$HOMEが現在のユーザーのまま保たれます。

sudo -H pip install パッケージ名

venv

venvは、Python3.3以降に準備されたPythonの仮想環境です。ものすごく簡単に言うと、「隔離されたPythonの環境を作ることができるので、失敗したらそのまま削除しても何も問題なし」という状況を作れます。

仮想環境の構築

それでは、仮想環境の構築をしていきます。ホームディレクトリの下に practice というディレクトリを作成し、その中に仮想環境 myvenv を作ることとします。

とても簡単で以下だけです。

mkdir practice
cd practice
python3 -m venv myvenv

ここでは “myvenv” としましたが、「Python実践入門」などには、”venv” で統一することをおすすめしているものもあります。

その場合には、python3 -m venv venv となるわけですね。今は理解しやすいようにそのようにします。

そうすると、practiceの下に myvenv というディレクトリが作成されています。myvenvの中にPython一式が入っています。

仮想環境の有効化

それでは、このPythonを使うために有効化します。そのためには、myvenv/bin/activateを実行します。

source myvenv/bin/activate

すると、ターミナルが

(myvenv) kiyotaka@ubuntu:~/practice$

のように (myvenv) というものがつきます。

早速、python3の場所を確認してみましょう。

$ which python3
/home/kiyotaka/practice/myvenv/bin/python3

myvenvの下にある python3 を示していますね。

pipの場所も確認します。

$ which pip
/home/kiyotaka/practice/myvenv/bin/pip

こちらも同様です。

ためしに、pydicom をインストールしてみます。

(myvenv) kiyotaka@ubuntu:~/practice$ pip install pydicom
Collecting pydicom
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/53/9a/98df4fb41e7905b587be2ee9ce38bab8a092990bd174f46fd915a23ec0ea/pydicom-2.2.2-py3-none-any.whl (2.0MB)
    100% |################################| 2.0MB 318kB/s 
Installing collected packages: pydicom
Successfully installed pydicom-2.2.2

すんなり入りました。

仮想環境の無効化

無効化は簡単で、 deactivate とするだけです。

(myvenv) kiyotaka@ubuntu:~/practice$ deactivate
kiyotaka@ubuntu:~/practice$ 

deactivateすると、ターミナルの最初の (myvenv) がとれますので、わかります。

ちなみに、ここで which python3 をやってみます。

kiyotaka@ubuntu:~/practice$ which python3
/usr/bin/python3

システムの python3 に変化しました。

仮想環境の削除

myvenvをそのまま捨てるだけでOKです。

rm -rf myvenv

機械学習や深層学習を勉強したい時

以上をまとめると、機械学習や深層学習をとりいそぎ勉強してみたいけど、システムをいじるのが怖いという場合、
venvを使って以下をすることで、たいていのことができるかなと思います。以下は「PythonとKerasによるディープラーニング」
でインストールすることを勧められているパッケージに加えてscikit-learnを加えたものです。
なお、pip install -U pip は pip そのものをアップデートするコマンドで、仮想環境なので最初に pip を最新版にアップデートしています。これをしないと opencv-python のインストールに失敗する場合があります。

cd $HOME
mkdir practice_ml
cd practice_ml
python3 -m venv venv
source venv/bin/activate
pip install -U pip
pip install opencv-python python-dateutil jupyter notebook
pip install numpy scipy scikit-learn 
pip install cmake matplotlib pyyaml h5py pydot-ng keras pillow 
pip install tensorflow

このようにやっていけば、Anacondaに頼らなくても、仮想環境で必要なものを pip でいれていけば、たいていの場合はうまくいくのではないかと思います。

補足
Apple M1の場合、そうは簡単ではないということがわかりました。これはまた別のポストで扱おうと思います。

Anacondaに頼らない、pipとvenvを用いたPython環境の構築” へのコメント

  1. ピングバック: LinuxやmacOSでPythonの仮想環境を構築する方法

  2. いつも大変勉強になります。先生は、Ubuntu上でPythonの環境構築をされているようですが、理由は何かございますでしょうか。自分はWindowsが使い慣れているので、PowerShellからの環境構築を試みています。

    • ご質問ありがとうございます。理由は簡単で、私は日常からLin4Neuroを使っているからです。チュートリアルでは皆様に仮想マシンでお配りしていますが、私のノートPCとデスクトップPCは実環境でLin4Neuroで動いているので、Pythonなども必然的にそのうえで環境を構築することになります…。逆にWindowsはそれこそWordとかPowerpointなど、同僚と情報を共有するためだけに使っているぐらいなので、そこまで使い倒さなくなってきています。Powershellはコマンドプロンプトに比べて使いやすさが増えてきましたので、いいのではないでしょうか。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください