Python (仮想)環境構築まとめ

## pip

pipによるライブラリのインストール

```bash
python -m pip install --upgrade pip #pipのアップデート
python -m pip install numpy
python -m pip install "matplotlib<3.9"
python -m pip install matplotlib==3.8.4 #バージョン指定
```

環境設定の書き出し

```bash
python -m pip freeze > requirements.txt
```

読み込み

```bash
python -m pip install -r requirements.txt
```

## venv

特定のディレクトリの中にライブラリ等の仮想環境設定が格納される。例えば仮想環境を適用したいプロジェクト直下の.venvディレクトリにそれを作成する。  

仮想環境の構築

```bash
cd project
python -m venv .venv
```

仮想環境のアクティベート/ディアクティベート

```bash
$ source .venv/bin/activate
(.venv) $ deactivate
```

あとは`pip`で環境構築

## pyenv

pyenv->venv->pipにより仮想環境を構築する

詳細はこちら
https://github.com/pyenv/pyenv

### pyenvのインストール

```bash
curl https://pyenv.run | bash
```

※`~/.pyenv`にpyenvが格納される。

`~/.bashrc`等に以下を記入

```bash:~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
```

### Pythonのインストール

様々なバージョンPythonのソースコードをコンパイルして実行するのであらかじめコンパイルに必要なライブラリをダウンロードことが重要である。  

詳細はこちら
https://github.com/pyenv/pyenv/wiki

```bash
# CentOS Stream 9の場合
dnf install gcc make patch zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel
# Ubuntu 22.04の場合
sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
```

インストール可能なバージョンリストを表示

```bash
pyenv install --list
```

インストール

```bash
pyenv install 3.12.6
```

バージョンを切り替える

```bash
$ pyenv versions
-> * systems
->  3.12.6
$ pyenv global 3.12.6
$ pyenv -V #バージョン確認
```

## anyenv

anyenv->pyenv->venv->pipにより仮想環境を構築

### install方法

https://github.com/anyenv/anyenv  
Manual git checkoutの指示に従う  

```bash
git clone https://github.com/anyenv/anyenv ~/.anyenv
```

`~/.bashrc`等に以下を記入

```bash:~/.bashrc
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
```

ターミナルを再起動後以下が必要になる場合がある

```bash
anyenv install --init
```

### Pythonのインストール

```bash
anyenv install pyenv
```

※`~/.anyenv/envs/pyenv`に`pyenv`が格納される

環境変数
`$HOME/.anyenv/envs/pyenv/shims`
`$HOME/.anyenv/envs/pyenv/bin`
が追加されpyenvを直接インストールした時と同じになる。  
後はpyenvで行う。

## asdf

asdf->venv->pipで環境構築

詳しくは
https://asdf-vm.com/  
https://github.com/asdf-vm/asdf  

### インストール

```bash
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
```

~/.bashrcに以下を記入

```bash:~/.bashrc
source $HOME/.asdf/asdf.sh
source $HOME/.asdf/completions/asdf.bash
```

### pythonプラグインの導入

```bash
asdf plugin list all #プラグインリストの表示
asdf plugin add python
```

### Pythonのインストール

様々なバージョンPythonのソースコードをコンパイルして実行するのであらかじめコンパイルに必要なライブラリをダウンロードことが重要である。

詳細はこちら
https://github.com/pyenv/pyenv/wiki

```bash
# CentOS Stream 9の場合
dnf install gcc make patch zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel
# Ubuntu 22.04の場合
sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
```

```bash
$ asdf list all python #どのバージョンをinstallするか確認
$ asdf install python 3.12.6 #3.12.6のインストール
```

Pythonの実行バージョンを変更

```bash
$ asdf list python #インストールしたpythonのバージョンを見る
$ asdf global python 3.12.6 #全体を3.12.6にする
$ asdf global python system #戻す
$ asdf local python 3.12.6 #カレントディレクトリで実行した場合のpython環境をこれにする
```

globalの場合は`~/.tool-versions`にバージョンが記載されその内容をもとに指定のバージョンが読み込まれる。  
localの場合はカレントディレクトリの`.tool-versions`にバージョンが記載される。そのディレクトリで実行した際にそのバージョンが指定される。

その後は`venv`と`pip`で仮想環境を構築。  

## Poetry

https://python-poetry.org/

### install

直接インストールの場合

```bash
curl -sSL https://install.python-poetry.org | python3 -
```

※`~/.local/bin/poetry`が作成される。  

~/.bashrcに以下を記入

```bash:~/.bashrc
export PATH=”$HOME/.local/bin:$PATH”
```

更新とbashcompletionの導入
```bash
poetry --version
poetry self update
poetry completions bash >> ~/.bash_completion
```

※asdfでも導入できるのでasdfを使用している人はこちらで導入したほうがよいと思われます。

### uninstall

```bash
curl -sSL https://install.python-poetry.org | python3 - --uninstall
```

### プロジェクトの作成

gitが必須

```bash
poetry new hello-project
```

※pyptoject.tomlのtool.poetry.authersにはgitの設定内容を使用。  

すでにあるプロジェクトでの実行
```bash
cd hello-project
poetry init
```

※pyproject.tomlが作成されるだけ  

### 設定

```bash
poetry config –list #設定を表示
poetry config virtualenvs.in-project true
```

仮想環境のライブラリをプロジェクトの.venvディレクトリに格納する。

### poetryの仮想環境で実行

その都度実行
```bash
poetry add numpy
poetry add pytest --group dev #dev環境のみ
poetry run python aaa.py
poetry run python -m pip list
```

永久実行

```bash
poerty shell
python aaa.py
```

### gitを入れる

```bash
git init
```

その後`.gitignore`を作成。