# pyenv & pipenv で環境構築
こんにちは, Jabelic です. 本稿はNCC Advent Calendar 2020 (opens new window)3 日目の記事です. いやぁ, 枠が埋まらなくて大変ですね...
今回は自分が使っている python の開発環境のメモを紹介します. 現象数理学科の授業では Anaconda を推奨するアナウンスがされていますが, Anaconda には様々な副作用があることが報告されています.
簡単に Anaconda を卒業するなら system に直接 python3.x を install すれば良いですが, まぁ念のため仮想環境でも使っておこうと言う話.
# 環境
OS: Catalina 10.15.6
CPU: Intel Core i5
メモリ: 16GB
# pyenv とは
python のバージョンをスイッチできるライブラリ.
$ brew install pyenv
$ sudo nano ~/.zshrc
以下を追加.
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
$ source ~/.zshrc
忘れない.
# 使い方
pytenv での python の install 可能バージョン一覧
$ pyenv install --list
例えば 3.8.0 を install するなら
$ pyenv install 3.8.0
現在のディレクトリのみで 3.8.0 を使う場合
$ pyenv local 3.8.0
グローバルで変えるなら
$ pyenv global 3.8.0
$ pyenv versions
system
3.8.4
* 3.8.6 (set by /Users/xxxxxxx/stock/tmppy/.python-version)
# pipenv とは
パッケージ毎のライブラリの管理をしてくれる仮想環境.
$ brew install pipenv
# 使い方
$ mkdir hogeDev && cd hogeDev
$ pipenv install
$ pipenv install numpy
Pipfile と言うファイルに設定が記述される. このファイルを共有することでチームで環境を揃えることができる.
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
numpy = "*"
[dev-packages]
[requires]
python_version = "3.8"
Pipfile.lock と言うファイルがここで生成されるが, これは実際に install されたパッケージのバージョンが記述されている.
仮想環境に入る
$ pipenv shell
仮想環境内で無理やり pyenv で指定したバージョンを利用 するには
$ source ~/.zshrc
仮想環境を消す
$ pipenv --rm
仮想環境内でライブラリを追加, 実行
hoge > pipenv install jupyterLab
hoge > pipenv run jupyter lab
Pipfile.lock を参照して環境を build するなら
$ pipenv sync --dev
# WSL で pipenv
# pyenv を入れる
$ sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
$ pyenv install --list
# pip 入れる
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo apt install python3-disutils
$ python get-pip.py --user
$ python -m pip install --upgrade pip
$ echo 'export PATH="$HOME/.pyenv/shims:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
# pipenv 入れる
$ python -m pip install --user pipenv
$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
こんな感じ.
$ which python
>/home/xxxxxx/.pyenv/shims/python
$ python -m pipenv install xxxxx
# 参考
Python のパッケージ周りのベストプラクティスを理解する (opens new window)
WSL に pipenv を導入するまで (opens new window)
Pipfile.lock で固定された依存関係を再現するなら pipenv sync コマンドを使おう (opens new window)