普段使いのMacではとりあえずでpyenvを導入していて、 Pythonの仮想環境の構築の仕方についてあやふやだったので 確認がてら新しく環境を作ってみた。 vagrantでUbuntu 14.04 LTSの仮想マシンを作成して実施。

Pythonバージョン別の仮想環境の構築方法とpipのインストール有無は以下の感じ。 3.3からvenvが導入されたのと3.4からensurepipが導入されて pipがインストールされるようになってるはず。

Python tool pip
2.7 virtualenv 入ってる
3.3 pyvenv 入ってない
3.4 pyvenv 入ってる

Ubuntu 14.04 LTS に付属しているPython3.4.0を使ってみる

3.4からは標準で仮想環境も作れるしpipも最初からインストールされてるしで便利なんだろうなーっと…

1
2
$ pyvenv-3.4 env34
Error: Command '['/home/vagrant/env/env34/bin/python3.4', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1

うーん? ensurepipのscript実行でエラーの模様。

1
2
$ python3.4 -Im ensurepip --upgrade --default-pip
/usr/bin/python3.4: No module named ensurepip

そんなモジュールないよとのこと。どうやらpython3パッケージ3.4.0-0ubuntu2にはensurepipが入ってないようで。

1
$ python3.4 -m venv env34 --without-pip  

pipなしなら仮想環境作れるけどせっかくならpipは最初から入って欲しい。

ソースコードからビルドしてみる

公式パッケージリポジトリには2系と3系の二つしか入手できないので ソースコードからビルドしてみる。せっかくなので現時点の最新で。

1
2
3
4
5
6
7
$ cd
$ wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
$ tar xzf Python-3.4.2.tgz
$ cd Python-3.4.2
$ ./configure --prefix=/opt/python-3.4.2
$ make 2>&1 | tee make.log
$ sudo make install 2>&1 | tee make_install.log

システムとは別の場所にインストールしておいて、仮想環境作成すると

1
$ /opt/python-3.4.2/bin/pyvenv-3.4 env342

うまくいったような感じがするけど

1
2
3
4
$ source env342/bin/activate
(env342) $ pip
The program 'pip' is currently not installed. To run 'pip' please ask your administrator to install the package 'python-pip'
(env342) $ deactivate

pipなんてないって言われちゃってますよと。

足りてないパッケージをインストールする

makeのログを見てみると最後のほうでなんか言われてますね

1
2
3
4
5
6
7
8
9
...
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2                  _curses               _curses_panel
_dbm                  _gdbm                 _lzma
_sqlite3              _ssl                  _tkinter
readline              zlib
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
...

それっぽいパッケージをインストールして

1
$ sudo apt-get install libbz2-dev libgdbm-dev liblzma-dev libsqlite3-dev libssl-dev libreadline-dev libncurses5-dev tk-dev

再度makeして再インストール

1
2
3
4
5
$ rm -rf /opt/python-3.4.2
$ cd ~/Python-3.4.2
$ sudo make clean
$ make 2>&1 | tee make.log
$ sudo make install 2>&1 | tee make_install.log

ログにはpipがインストールされた旨のメッセージが表示された。

1
2
3
4
...
Installing collected packages: setuptools, pip
Successfully installed setuptools pip
Cleaning up...

実際に仮想環境作ってみるとpipsetuptoolsがインストールされていた

1
2
3
4
5
6
$ cd
$ /opt/python-3.4.2/bin/pyvenv env342
$ source env342/bin/activate
(env342) $ pip list
pip (1.5.6)
setuptools (2.1)

とりあえず目的は達成したのでよしとする。 依存パッケージのインストールってこれで合ってるのか不安。

Comments