~/blog/how-to-manage-python-versions-and-use-pyenv
Published on

Pythonのバージョン管理をする方法とpyenvの使い方

2606文字5分で読めます–––
閲覧数
Authors
  • avatar
    Name
    Shou Arisaka nyapp.buzz/shou
    short bio
    Z世代の情報技術者。Next.jsで自作SNSを個人開発中。

Pythonやプログラミング言語では、使用するライブラリやフレームワーク、依存関係との互換性に合わせて、複数のバージョンをサイドバイサイドでインストールしておく必要に迫られる場合が多々あります。そのような場合に活用できるのが、"バージョン管理ツール"、"バージョンマネージャー"などと呼ばれるもので、Python言語では"pyenv"がそれにあたります。

Ubuntu 16.04にpyenvをインストールしてPythonのバージョン管理を可能にしてみましょう。Ubuntu18.04、WSLでも同様に可能です。

インストールします。

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

~/.bashrcへ追記します。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

ここで注意があります。以下の通り、echo $BASH_ENVにて~/.bashrcが出力されるようであれば、~/.bashrcへ上記コードを追記するのはやめたほうがいいらしいとのことです。その代わりに、~/.bash_profileへ追記をします。

僕の環境では~/.bash_profileは作っておらず、またBASH_ENVも未定義であったので、無視して.bashrcへ追記をして使っていますが、問題は出ていません。

General warning: There are some systems where the BASH_ENV variable is configured to point to .bashrc. On such systems you should almost certainly put the abovementioned line eval "$(pyenv init -)" into .bash_profile, and not into .bashrc. Otherwise you may observe strange behaviour, such as pyenv getting into an infinite loop.

再起動します。

bash

以下の通り、Pythonをpyenvでインストールする前に、依存関係のプログラムをインストールしてくれとあります。

Install Python build dependencies before attempting to install a new Python version.

Python環境がすでにある方は問題ないかと思いますが、Python自体インストールしていないという方はこれらをインストールしておく必要がありそうです。 実際に検証していませんが、だいたい以下のコードを実行しておけば問題ないかと思います。

sudo apt-get install -y python3-pip python3-dev # for Python 3.n
pip3 install --upgrade pip

以下で任意のバージョンのPythonをインストールできます。

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_d4710de5-0596-4374-8545-eb6de25ad46a.png
pyenv install 3.6.7
pyenv install 2.7.12

pyenv globalで使用するPythonのバージョンを指定します。これで、自動でpythonpython3コマンドがpyenvにオーバーライドされたことになります。

$ pyenv global 2.7.12 3.6.7
$ pyenv versions
  system
* 2.7.12 (set by /Users/yyuu/.pyenv/version)
* 3.6.7 (set by /Users/yyuu/.pyenv/version)
$ python --version
Python 2.7.12
$ python2.7 --version
Python 2.7.12
$ python3.6 --version
Python 3.6.7

pyenvでバージョンを変更する前には失敗していたコマンドが…

$ python3 --version
Python 3.5.2

$ epy 'regex_match("hoge","hoge")'
  File "/mnt/c/pg/epy.py", line 28
    if ( re.match(rf"{regex}", text, re.M) ) : return True
                            ^
SyntaxError: invalid syntax

エラーなく成功するようになりましたね。

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_5057c581-fc3b-405b-92e2-ac9f4aedbe36.png
$ python3.6 --version
Python 3.6.7
$ python3 --version
Python 3.6.7
$ epy 'regex_match("hoge","hoge")'
$
avatar

Shou Arisaka

情報技術者 / Z世代プログラマー / SaaSアプリやSNSを開発
今すぐ話そう!

15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。

Created with Fabric.js 5.2.4 何かご質問がありますか?