From 33425d9b4dca6b86bb09dd8a44cc16499001e4dc Mon Sep 17 00:00:00 2001 From: "Kaz Saita(raspi4)" Date: Fri, 15 Mar 2024 17:15:02 +0900 Subject: [PATCH] sync notes(auto) --- ...110428 venv pyenv virtualenv などの関係.md | 17 +++ content/20240315154213 pyenv.md | 109 ++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 content/20240315110428 venv pyenv virtualenv などの関係.md create mode 100644 content/20240315154213 pyenv.md diff --git a/content/20240315110428 venv pyenv virtualenv などの関係.md b/content/20240315110428 venv pyenv virtualenv などの関係.md new file mode 100644 index 0000000..ae7a3cc --- /dev/null +++ b/content/20240315110428 venv pyenv virtualenv などの関係.md @@ -0,0 +1,17 @@ +# 20240315110428 venv pyenv virtualenv などの関係 + +#python #venv #pyenv #virtualenv #poetry + +## 雑な説明 +- pyenv : pythonそのもののバージョンを複数切りかえたい時に使用するツール [[20240315154213 pyenv|pyenv]] +- venv : pythonに標準で付属するvirtualenvの機能限定版 [[20240121125457 venv|venv]] +- virtualenv : (自分のユースケースでは直接気にしなくていいかも)pipをプロジェクト専用にインストールする環境を構築してくれるツール。pythonのバージョン切りかえが可能、と解説してあるサイト等もあるが本当かな? + +## poetryとの関係 + +- virtualenv: poetryで生成されるプロジェクト内(or cacheの) .venv はvirtualenv経由で作成されている。 cf. [Configuration | Documentation | Poetry - Python dependency management and packaging made easy](https://python-poetry.org/docs/configuration/) +- pyenv: `poetry env use`コマンドを使うことで、実行環境を切りかえられる。 ただし、poetry initの時に実行されるのは、ディレクトリ内で `pyenv local` を指定したとしても、systemのバージョンになる。 `pyenv global`の内容も無視される。 +- pyenv: (将来的にはpyenvで実行環境を指定してからpoetryを実行することで、プロジェクトで使うpythonのバージョンを設定できる。 experimental扱い) +## Ref. +- Poetry Configuration [Configuration | Documentation | Poetry - Python dependency management and packaging made easy](https://python-poetry.org/docs/configuration/) +- Poetry Managing environments [Managing environments | Documentation | Poetry - Python dependency management and packaging made easy](https://python-poetry.org/docs/managing-environments/) \ No newline at end of file diff --git a/content/20240315154213 pyenv.md b/content/20240315154213 pyenv.md new file mode 100644 index 0000000..59218ea --- /dev/null +++ b/content/20240315154213 pyenv.md @@ -0,0 +1,109 @@ +# 20240315154213 pyenv +#python #pyenv +[pyenv](https://github.com/pyenv/pyenv) pythonのバージョンセレクタ。 + +## インストール方法(Raspberry Pi OS) +公式サイトの方法に準じる。 aptのパッケージには無い。 + +```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 +``` + +## 使い方 + +### 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 libncurses-dev libbz2-dev +``` +## Refs. +- [GitHub - pyenv/pyenv: Simple Python version management](https://github.com/pyenv/pyenv)