Pythonについて学習する前にPythonの環境構築したい。
開発環境
- Linux Mint 17.3 MATE 32bit
- Python 3.4.3
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インストール
$ 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
今後の運用
- PC起動
- ターミナル起動(
Ctrl
+Alt
+T
) bash -l
コマンド実行
これでpython
コマンドのバージョンがpyenv global <version>
で指定したバージョンのものになる。
所感
まったく簡単ではなかった。コマンド一発で成功することは珍しい。そのたびに検索して別のコマンドを打つことになる。面倒だし一人では絶対に解決できない自信がある。
また、毎回入力するのが面倒くさい。ログインパスワード入力を省略しつつbash -l
も実行できないものか。