やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Pythonの環境構築について調べてpyenvで3.6.1をインストールした

Pythonについて学習する前にPythonの環境構築したい。

開発環境

Pythonの複数バージョンを共存させたい

Pythonは2,3のバージョンによってコードが大きく異なる。マイナーバージョンによる差もある。複数のバージョンを使い分けたいことがある。

今の私の環境はは3.4.3と古い。今回は学習用に最新バージョンが欲しい。そこで仮想環境を構築するツールを利用するらしい。

参考

http://ymotongpoo.hatenablog.com/entry/2017/01/29/002039
Pythonの仮想環境構築(2017年版) pyenvとpyenv-virtualenvとvirtualenvとvirtualenvwrapperとpyvenvとvenv - Qiita
pyenvとvirtualenvで環境構築 - Qiita

以下の3つがある。virtualenvがデファクトスタンダードらしい。

  • pyenv, pyenv-virtualenv
  • virtualenv, virtualenvwapper
  • pyvenv, venv

しかしpyenvのほうが楽そう。

pyenvインストール

http://uxmilk.jp/43185

$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2099  100  2099    0     0   2829      0 --:--:-- --:--:-- --:--:--  2840
Cloning into '/home/{user}/.pyenv'...
remote: Counting objects: 566, done.
remote: Compressing objects: 100% (432/432), done.
remote: Total 566 (delta 224), reused 253 (delta 45), pack-reused 0
Receiving objects: 100% (566/566), 250.32 KiB | 100.00 KiB/s, done.
Resolving deltas: 100% (224/224), done.
Checking connectivity... done.
Cloning into '/home/{user}/.pyenv/plugins/pyenv-doctor'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 11 (delta 1), reused 6 (delta 1), pack-reused 0
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
Cloning into '/home/{user}/.pyenv/plugins/pyenv-installer'...
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 17 (delta 2), reused 10 (delta 0), pack-reused 0
Unpacking objects: 100% (17/17), done.
Checking connectivity... done.
Cloning into '/home/{user}/.pyenv/plugins/pyenv-update'...
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 7 (delta 1), reused 5 (delta 1), pack-reused 0
Unpacking objects: 100% (7/7), done.
Checking connectivity... done.
Cloning into '/home/{user}/.pyenv/plugins/pyenv-virtualenv'...
remote: Counting objects: 54, done.
remote: Compressing objects: 100% (48/48), done.
remote: Total 54 (delta 11), reused 16 (delta 0), pack-reused 0
Unpacking objects: 100% (54/54), done.
Checking connectivity... done.
Cloning into '/home/{user}/.pyenv/plugins/pyenv-which-ext'...
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 1), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (10/10), done.
Checking connectivity... done.

WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by adding
# the following to ~/.bash_profile:

export PATH="/home/{user}/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
echo 'export PATH="~/.pyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
$ which pyenv

パスが表示されなかった。反映には再起動が必要だったか?覚えていない。

ログインしないと~/.bash_profileは実行されないらしい。

https://unix.stackexchange.com/questions/88106/why-doesnt-my-bash-profile-work
翻訳

Linuxをインストールするとき、ログインしない設定にした影響か。

以下のコマンドを実行すると~/.bash_profileが実行される。

bash -l
$ pyenv
pyenv 1.0.10
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme
~/.pyenv/bin $ ./pyenv commands
--version
activate
commands
completions
deactivate
doctor
exec
global
help
hooks
init
install
installer
local
offline-installer
prefix
rehash
root
shell
shims
uninstall
update
version
version-file
version-file-read
version-file-write
version-name
version-origin
versions
virtualenv
virtualenv-delete
virtualenv-init
virtualenv-prefix
virtualenvs
whence
which

pyenvでPython3.6.1をインストールする

~/.pyenv/bin $ ./pyenv install 3.6.1

1回目は途中でフリーズした。他のアプリをすべて終了させ、もう一度やる。

インストール完了に10分間を要した。警告が表示された。

$ pyenv install 3.6.1
Downloading Python-3.6.1.tar.xz...
-> https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
Installing Python-3.6.1...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.6.1 to /home/mint/.pyenv/versions/3.6.1

調べてみる。

pyenv使ってみた:Python3.3.2環境構築 - DRYな備忘録

$ sudo apt-get install libbz2-dev

Ubuntu 15.10 で pyenv install 3.5.0 したら pip がインストールできなくて落ちる - Qiita

$ sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev

私の場合、必要なのは以下と思われる。

$ sudo apt-get install libbz2-dev libsqlite3-dev
$ sudo apt-get install libbz2-dev libsqlite3-dev
[sudo] password for mint: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
提案パッケージ:
  sqlite3-doc
以下のパッケージが新たにインストールされます:
  libbz2-dev libsqlite3-dev
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 404 個。
473 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,506 kB のディスク容量が消費されます。
取得:1 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu/ trusty/main libbz2-dev i386 1.0.6-5 [31.9 kB]
取得:2 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu/ trusty-updates/main libsqlite3-dev i386 3.8.2-1ubuntu2.1 [442 kB]
473 kB を 1秒 で取得しました (247 kB/s) 
以前に未選択のパッケージ libbz2-dev:i386 を選択しています。
(データベースを読み込んでいます ... 現在 191939 個のファイルとディレクトリがインストールされています。)
.../libbz2-dev_1.0.6-5_i386.deb を展開する準備をしています ...
libbz2-dev:i386 (1.0.6-5) を展開しています...
以前に未選択のパッケージ libsqlite3-dev:i386 を選択しています。
.../libsqlite3-dev_3.8.2-1ubuntu2.1_i386.deb を展開する準備をしています ...
libsqlite3-dev:i386 (3.8.2-1ubuntu2.1) を展開しています...
libbz2-dev:i386 (1.0.6-5) を設定しています ...
libsqlite3-dev:i386 (3.8.2-1ubuntu2.1) を設定しています ...

再びやってみると成功。

$ pyenv install 3.6.1
pyenv: /home/mint/.pyenv/versions/3.6.1 already exists
continue with installation? (y/N) y
Downloading Python-3.6.1.tar.xz...
-> https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
Installing Python-3.6.1...
Installed Python-3.6.1 to /home/mint/.pyenv/versions/3.6.1

バージョン指定

現状のpythonコマンドが指すバージョンを確認する。

$ python -V
Python 2.7.6

pyenvにて3.6.1に指定する。

$ pyenv global 3.6.1

確認すると、3.6.1になっている。成功!

$ python -V
Python 3.6.1

今後の運用

  1. PC起動
  2. ターミナル起動(Ctrl+Alt+T)
  3. bash -lコマンド実行

これでpythonコマンドのバージョンがpyenv global <version>で指定したバージョンのものになる。

所感

まったく簡単ではなかった。コマンド一発で成功することは珍しい。そのたびに検索して別のコマンドを打つことになる。面倒だし一人では絶対に解決できない自信がある。

また、毎回入力するのが面倒くさい。ログインパスワード入力を省略しつつbash -lも実行できないものか。