t# 20240315154213 pyenv #python #pyenv [pyenv](https://github.com/pyenv/pyenv) pythonのバージョンセレクタ。 [[20231129211719 poetry|poetry]]とセットで使うと便利かもしれない。 ## インストール方法(Raspberry Pi OS) 公式サイトの方法に準じる。 raspberry pi OSのaptパッケージには無い。 ### linux/mac OS ```sh $ curl https://pyenv.run | bash ``` `~/.bashrc`に下記を追加 ```sh export PYENV_ROOT="$HOME/.pyenv" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" ``` 設定の反映 ``` $ . ~/.bashrc ``` ### windows pyenvそのものはwindowsに対応していない。代替で [pyenv-win](https://github.com/pyenv-win/pyenv-win) がある。 ちょっと使ってみた感じ、 `pyenv install [version]` の所が、pyenvでは 3.12 のようなマイナーバージョンを指定すると最新をインストールしてくれるが、pyenv-winだとパッチバージョンまで指定しないとインストールできなかった。他にも違いがあるかもしれない。 ## 使い方 ### pyenv自体のアップデートしたい ``` $ pyenv update ``` ### 現在インストールされているpythonのリストを表示したい ``` $ pyenv versions ``` ### 特定のバージョンのpythonをユーザーが全体で使いたい ``` $ pyenv global [version] ``` どのバージョンを指定したかは `~/.pyenv/version`というファイルに書かれる。 ### 特定のバージョンのpythonを特定のディレクトリ以下で使いたい ``` $ pyenv local [version] ``` どのバージョンを指定したかは ディレクトリ内の`.python-version`というファイルに書かれる。 そのディレクトリ以下では、別の階層のディレクトリに入っても .python-versionが再度出てこない限りは同じバージョンが使われるので、プロジェクトのroot的な所で実行すればよい。 ### インストール可能なpythonのリストを表示したい ``` $ pyenv install -list Available versions: . . . ``` anacondaとかmicropythonも選択可能 ### 特定のpythonをインストールしたい 3.12.2がインストールしたいとすると ``` $ pyenv install 3.12.2 Downloading Python-3.12.2.tar.xz... -> https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz Installing Python-3.12.2... ``` ソースからビルドしてるっぽい。自分の環境では以下のwarningが出た ``` ModuleNotFoundError: No module named '_bz2' WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib? Traceback (most recent call last): File "", line 1, in File "/home/kazbo/.pyenv/versions/3.12.2/lib/python3.12/curses/__init__.py", line 13, in from _curses import * ModuleNotFoundError: No module named '_curses' WARNING: The Python curses extension was not compiled. Missing the ncurses lib? Traceback (most recent call last): File "", line 1, in File "/home/kazbo/.pyenv/versions/3.12.2/lib/python3.12/ctypes/__init__.py", line 8, in from _ctypes import Union, Structure, Array ModuleNotFoundError: No module named '_ctypes' WARNING: The Python ctypes extension was not compiled. Missing the libffi lib? Traceback (most recent call last): File "", line 1, in ModuleNotFoundError: No module named 'readline' WARNING: The Python readline extension was not compiled. Missing the GNU readline lib? Traceback (most recent call last): File "", line 1, in File "/home/kazbo/.pyenv/versions/3.12.2/lib/python3.12/sqlite3/__init__.py", line 57, in from sqlite3.dbapi2 import * File "/home/kazbo/.pyenv/versions/3.12.2/lib/python3.12/sqlite3/dbapi2.py", line 27, in from _sqlite3 import * ModuleNotFoundError: No module named '_sqlite3' WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib? Traceback (most recent call last): File "", line 1, in File "/home/kazbo/.pyenv/versions/3.12.2/lib/python3.12/lzma.py", line 27, in from _lzma import * ModuleNotFoundError: No module named '_lzma' WARNING: The Python lzma extension was not compiled. Missing the lzma lib? ``` それぞれの対応するライブラリをインストール ``` $ sudo apt install liblzma-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev libdb-dev libreadline-dev libgdbm-dev libncursesw5-dev libssl-dev zlib1g-dev uuid-dev tk-dev ``` ## Refs. - [GitHub - pyenv/pyenv: Simple Python version management](https://github.com/pyenv/pyenv)