komeの備忘録

東大理系大学院生の技術ブログ。たまに趣味。

Ubuntu18.04にpyenvをインストールして美しいpython環境を構築する

pythonの環境構築を失敗すると、バージョンに依存して使えないAPIがあったりして、色々困る。 これまでは頭を空っぽにして$ sudo apt install python3とかやりまくってたけど、後々つらいことが色々あった。 今回はUbuntu18.04を対象に、pyenvを使って複数バージョンのpythonを管理する環境を構築する。

環境
Ubuntu18.04 Desktop

そもそもpyenvとは

github.com

上記githubページで開発されており、この中の説明の要点を日本語にする。

pyenvは、複数バージョンのpythonを簡単に切り替えて使えるようにする、シンプルなpythonバージョン管理ツールである。

pyenvは以下の操作を可能にする。

  • pythonコマンドで呼び出されるpythonのバージョンをユーザ単位で変更
  • プロジェクト単位でのpythonのバージョン管理の提供
  • pythonのバージョンを環境変数での上書きを許可
  • 瞬時的な複数バージョンのpythonのコマンド探索

要するに、python2系、3系を始め、複数のバージョンのpythonを1つのマシン上で利用できるようにするツールである。

どうやって動いているかなどの詳しい説明は、先程のgithubページにも書いてあるので、気になったら確認してみるとよい。

pyenvのインストール

githubにある公式のインストール方法に従ってインストールを試みる。

pyenvは、pyenvの安定版を自動でインストールためのリポジトリが用意されているので、基本的にはこれを用いる。

開発中の最新不安定版を使いたい場合は、別途gitブランチをフォークして自分でコンパイルする必要がある。

自動インストール

以下のリポジトリを用いる。

github.com

注意書きを読むと、2通りのやり方があるが、推奨されている方を用いた。

  1. 必要なパッケージのインストール

    最初に、コンパイルに必要なライブラリとパッケージをインストールする。

    $ sudo apt update
    $ sudo apt -y upgrade
    $ sudo apt -y install make build-essential libssl-dev zlib1g-dev libbz2-dev \
    libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
    xz-utils tk-dev libffi-dev liblzma-dev
  2. インストール

    github上のスクリプトをcurlでダウンロードし、実行する。

    $ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

    ダウンロードが完了する。 ダウンロード中に環境変数やパスのwarningが出る。 ひとまず下記のコマンドでパスを通しておく。

    $ export PATH="~/.pyenv/bin:$PATH"

    これでとりあえずpyenvが使えるようになる。

  3. アップデート

    まずはpyenvをアップデートする。

    $ pyenv update
  4. 設定ファイルに追記する

    各自の環境で用いているシェルの設定ファイル(.bashrc、.bash_profile、.zshrcなど)に、下記の3行を追記する。

    export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"

    最後にもう一度設定ファイルを読み込んでおく。

    私の場合、zshを使うので、.zshrcに追記して、下記のコマンドを実行する。

    $ source ~/.zshrc

    使ってみる

    • pyenvのバージョン確認

    $ pyenv -v
    pyenv 1.2.7

    • インストール可能なpythonのバージョン一覧確認

    $ pyenv install --list
    Available versions:
    2.1.3
    2.2.3
    2.3.7
    .
    .
    .

    • バージョンを指定してpythonをインストール

    上記のバージョン一覧確認で表示されたものをそのまま入力してインストールする。

    例では、python3.6.7をインストールしてみる。

    $ pyenv install 3.6.7

    • インストール済みのバージョン一覧の確認

    $ pyenv versions

    • pythonのバージョンをグローバルで切り替える

    グローバルに設定、というのはシステム全体でpythonコマンドで呼び出されるバージョンを設定するということである。

    まず最初に別のバージョンをインストールしておく。

    今回は、2.7.13をインストールする。

    $ pyenv install 2.7.13
    $ pyenv versions
    2.7.13
    3.6.7

    切り替える。

    $ pyenv global 3.6.7
    $ pyenv versions
      2.7.13
    * 3.6.7 (set by /home/kome/.pyenv/version)
    $ python --version
    Python 3.6.7
    $ pyenv global 2.7.13
    $ pyenv versions
    * 2.7.13 (set by /home/kome/.pyenv/version)
      3.6.7
    $ python --version
    Python 2.7.13
    *が先頭についているバージョンが、現在グローバルに設定されているバージョンである。

    • 特定のディレクトリ内でのバージョンを指定する

    globalに対して、localコマンドを指定する。

    localコマンドを実行すると、そのカレントディレクトリ内に.python-versionというファイルが生成される。これは、globalの設定より優先される。

    $ mkdir ~/test && cd ~/test
    $ pyenv local 3.6.7
    $ python --version
    Python 3.6.7
    $ cd ..
    $ python --version
    Python 2.7.13

    • 特定バージョンのアンインストール

    $ pyenv uninstall <Version>

    まとめ

    複数バージョンのpythonを共存させることに成功した。最近では2系のコードは少なくなってきているのであまり使わないかもしれないが、多くのバージョンで共存をさせようとしたときに、きっと必要になる機能である。

    参考にしたサイト

    github.com

    github.com

    github.com

    qiita.com

    www.python-izm.com