pyenvを使ってpythonをインストールする

背景

Pythonは周りにかける人が多いので、新しくサービスを開始するときは候補にあがりやすいです。そして、新しくサービスを構築することになり、Python3を採用することになりました(WebフレームワークはDjangoを予定)。

Pythonは10年以上前にやっていましたが、その頃は2.x系で(確か2.6とか2.7だった)3.x系は全くわからない状態です。

とりあえずローカルにインストールしてみようと思います。

anyenvのアップデート

RubyやNode.jsでanyenvを利用していたので、引き続きanyenvを利用してpyenvをインストールしようと思います。

まずはanyenvをアップデートします

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ anyenv update
Updating 'anyenv'...
Updating 'anyenv/anyenv-git'...
Updating 'anyenv/anyenv-update'...
Updating 'nodenv'...
Updating 'nodenv/node-build'...
| From https://github.com/nodenv/node-build
| 79b3b885..03dc3d06 master -> origin/master
| * [new tag] v4.9.42 -> v4.9.42
| * [new tag] v4.9.39 -> v4.9.39
| * [new tag] v4.9.40 -> v4.9.40
| * [new tag] v4.9.41 -> v4.9.41
Updating 'nodenv/nodenv-vars'...
Updating 'pyenv'...
| From https://github.com/pyenv/pyenv
| 54e58dc7..f81bffc9 master -> origin/master
| * [new tag] v2.0.1 -> v2.0.1
| * [new tag] 1.2.27 -> 1.2.27
| * [new tag] v2.0.0 -> v2.0.0
| * [new tag] v2.0.0-rc1 -> v2.0.0-rc1
Skipping 'pyenv/python-build'; not git repo
Updating 'rbenv'...
| From https://github.com/rbenv/rbenv
| d604acb..585ed84 master -> origin/master
| * [new branch] rehash-speedup -> origin/rehash-speedup
Updating 'rbenv/ruby-build'...
| From https://github.com/rbenv/ruby-build
| 0bd64d3..19ed806 master -> origin/master
| * [new tag] v20210526 -> v20210526
| * [new tag] v20210510 -> v20210510
Updating 'anyenv manifest directory'...

こちらでanyenvを最新にできました。

Pythonのインストール

インストール可能な一覧を見てみます

1
2
3
4
5
6
7
8
9
10
11
12
13
$ pyenv install -l
Available versions:
2.1.3
2.2.3
2.3.7
(中略)
3.9.3
3.9.4
3.9.5
3.10.0b2
3.10-dev
3.11-dev
...

最新は3.9.5のようですね、こちらをインストールしましょう

1
2
3
4
5
6
7
8
9
10
11
12
$ pyenv install 3.9.5
Downloading openssl-1.1.1k.tar.gz...
-> https://www.openssl.org/source/openssl-1.1.1k.tar.gz
Installing openssl-1.1.1k...
Installed openssl-1.1.1k to /Users/user/.anyenv/envs/pyenv/versions/3.9.5

python-build: use readline from homebrew
Downloading Python-3.9.5.tar.xz...
-> https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz
Installing Python-3.9.5...
python-build: use readline from homebrew
Installed Python-3.9.5 to /Users/user/.anyenv/envs/pyenv/versions/3.9.5

インストールできました

pyenvを利用するための設定

次に.bash_profileに以下の設定を追記します

1
2
3
export PYENV_ROOT="$HOME/.anyenv/envs/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"

この設定を行わないと

1
2
WARNING: `pyenv init -` no longer sets PATH.
Run `pyenv init` to see the necessary changes to make to your configuration.

というエラーが出て、pyenvではないpython(/usr/bin/python)が呼ばれてしまいます…

詳しい設定についてはメッセージにある通りpyenv initを実行すると表示できます

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ pyenv init

# (The below instructions are intended for common
# shell setups. See the README for more guidance
# if they don't apply and/or don't work for you.)

# Add pyenv executable to PATH and
# enable shims by adding the following
# to ~/.profile:

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"

# If your ~/.profile sources ~/.bashrc,
# the lines need to be inserted before the part
# that does that. See the README for another option.

# If you have ~/.bash_profile, make sure that it
# also executes the above lines -- e.g. by
# copying them there or by sourcing ~/.profile

# Load pyenv into the shell by adding
# the following to ~/.bashrc:

eval "$(pyenv init -)"

# Make sure to restart your entire logon session
# for changes to profile files to take effect.

anyenvを利用しているためPATHが少し違いますので注意が必要です。

動作確認

早速動作確認をしてみます

1
2
3
4
5
6
7
$ python
Python 3.7.9 (default, Nov 16 2020, 18:18:20)
[Clang 10.0.0 (clang-1000.10.44.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> $

想定しているバージョンでないPythonが起動しました…(しかも終了のコマンドを間違えています)

バージョンの指定をしてなかったことに気がつきました。このディレクトリでは3.9.5を利用するように設定します。

1
2
3
4
5
6
7
8
9
10
$ ls -a
. ..
$ pyenv local 3.9.5
$ ls -a
. .. .python-version
$ python
Python 3.9.5 (default, Jun 8 2021, 23:01:54)
[Clang 10.0.0 (clang-1000.10.44.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

無事3.9.5が起動しました。

まとめ

anyenv経由でpyenvを利用しPython3をインストールしました。(venvというmのもあるみたいです)

これからはパッケージ管理システムpipを学び、その後dockerでローカル開発環境を構築していきます

※ Python3勉強用に入門 Python3 第2版を購入しました。