メモ書き

自分が後で見直すためにつけている作業のメモ書きです.それ以上の意味はありません

anaconda で venv を使ってみる

macOS(Sierra) 上で pyenv(1.1.3) + anaconda(anaconda3-4.4.0) をインストールしたマシンで venv による仮想環境を作ってみる.
conda で仮想環境を作ることもできる.しかしpyenvとの併用だとactivateの利用でシェルが落ちる.
qiita.com
シェル設定でも回避できるが,別の方法を知っておきたい.
Python3だけしか使う予定がないならば標準の仮想環境であるvenvを使う方が筋がよいと思われる.そのためここで使い方を記録しておく.

今は tensorflow 用の仮想環境を作りたいのでそのためのディレクトリを仮想環境として作る
28.3. venv — 仮想環境の作成 — Python 3.6.1 ドキュメント

$ pyenv local
anaconda3-4.4.0
$ python --version
Python 3.6.1 :: Anaconda 4.4.0 (x86_64)

新しい仮想環境を作る(ここでは tensorflow という名称にする).
実行するとtensorflowという名称のサブディレクトリができる.

# 仮想環境の作成(エラー発生)
$ python -m venv tensorflow
Error: Command '['/Users/fooUser/work/hogeDir/tensorflow/bin/python', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.

エラーが出る.これは ensurepip が含まれていないため,ということらしい.
anaconda では仮想環境として conda を使用することを想定しているためそうなっているらしい(たぶん).
(この時点ですでに venv に anaconda は筋悪なのであるが,とりあえずこれでやる)
github.com

そこで anaconda のpython でvenvを使う場合は
Installation — pip 9.0.1 documentation
のページから get-pip.py をダウンロードし,これを用いて仮想環境内で pip をインストールする.

# 一旦ディレクトリを消してやり直す
$ ls
tensorflow
$ rm -rf tensorflow

# 仮想環境の作成(pipなし)
$ python -m venv tensorflow --without-pip

# get-pip.py の取得
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1558k  100 1558k    0     0  2940k      0 --:--:-- --:--:-- --:--:-- 2939k

# ファイル確認
$ ls
get-pip.py	tensorflow
$ cd tensorflow
$ ls bin/
activate	activate.csh	activate.fish	python		python3

# 仮想環境の起動.
$ source bin/activate

# 仮想環境に pip をインストール.
# ここでfooPC,fooUser はそれぞれその時の端末名,ユーザ名ということで,気にしない
(tensorflow) fooPC:tensorflow fooUser$ python ../get-pip.py 
Collecting pip
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 490kB/s 
Collecting setuptools
  Using cached setuptools-36.2.7-py2.py3-none-any.whl
Collecting wheel
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
    100% |████████████████████████████████| 71kB 4.3MB/s 
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-9.0.1 setuptools-36.2.7 wheel-0.29.0

# pip が仮想環境のディレクトリにインストールされていることを確認
(tensorflow) fooPC:tensorflow fooUser$ ls bin/
activate		easy_install		pip3			python3
activate.csh		easy_install-3.6	pip3.6			wheel
activate.fish		pip			python

# pipでインストールされているパッケージの表示.警告が出るので --format オプションの指定が必要らしい.
(tensorflow) fooPC:tensorflow fooUser$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
setuptools (36.2.7)
wheel (0.29.0)
(tensorflow) fooPC:tensorflow fooUser$ pip list --format=legacy
pip (9.0.1)
setuptools (36.2.7)
wheel (0.29.0)
(tensorflow) fooPC:tensorflow fooUser$ pip list --format=columns
Package    Version
---------- -------
pip        9.0.1  
setuptools 36.2.7 
wheel      0.29.0 

pip が使えるようになったら,tensorflowをインストール.

# tensorflow のインストール
(tensorflow) fooPC:tensorflow fooUser$ pip install tensorflow
Collecting tensorflow
  Using cached tensorflow-1.2.1-cp36-cp36m-macosx_10_11_x86_64.whl
Collecting html5lib==0.9999999 (from tensorflow)
Collecting markdown>=2.6.8 (from tensorflow)
Requirement already satisfied: wheel>=0.26 in ./lib/python3.6/site-packages (from tensorflow)
Collecting werkzeug>=0.11.10 (from tensorflow)
  Downloading Werkzeug-0.12.2-py2.py3-none-any.whl (312kB)
    100% |████████████████████████████████| 317kB 1.4MB/s 
Collecting bleach==1.5.0 (from tensorflow)
  Downloading bleach-1.5.0-py2.py3-none-any.whl
Collecting backports.weakref==1.0rc1 (from tensorflow)
  Using cached backports.weakref-1.0rc1-py3-none-any.whl
Collecting protobuf>=3.2.0 (from tensorflow)
Collecting six>=1.10.0 (from tensorflow)
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting numpy>=1.11.0 (from tensorflow)
  Using cached numpy-1.13.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Requirement already satisfied: setuptools in ./lib/python3.6/site-packages (from protobuf>=3.2.0->tensorflow)
Installing collected packages: six, html5lib, markdown, werkzeug, bleach, backports.weakref, protobuf, numpy, tensorflow
Successfully installed backports.weakref-1.0rc1 bleach-1.5.0 html5lib-0.9999999 markdown-2.6.8 numpy-1.13.1 protobuf-3.3.0 six-1.10.0 tensorflow-1.2.1 werkzeug-0.12.2

# インストール済みパッケージの確認
(tensorflow) fooPC:tensorflow fooUser$ pip list --format=columns
Package           Version  
----------------- ---------
backports.weakref 1.0rc1   
bleach            1.5.0    
html5lib          0.9999999
Markdown          2.6.8    
numpy             1.13.1   
pip               9.0.1    
protobuf          3.3.0    
setuptools        36.2.7   
six               1.10.0   
tensorflow        1.2.1    
Werkzeug          0.12.2   
wheel             0.29.0   

# 仮想環境を抜ける
(tensorflow) fooPC:tensorflow fooUser$ deactivate 

# 元の(仮想ではない)環境では tensorflow がインストールされていないままであることを確認
$ pip list --format=columns | grep tensorflow

仮想環境を削除する場合は仮想環境のディレクトリを削除する.