Open10

poetryとpyenvを使ったお手軽な仮想環境構築

Kumamoto-HamachiKumamoto-Hamachi
$ python --version
$ pyenv versions
  3.8.2
* 3.9.6 (set by /home/kumamoto/.pyenv/version)
$ pyenv install 3.9.6
$ pyenv global 3.9.6
$ python --version
Python 3.9.6
Kumamoto-HamachiKumamoto-Hamachi
[kumamoto poet-practice]$ poetry init

This command will guide you through creating your pyproject.toml config.

Package name [poet-practice]:  
Version [0.1.0]:  
Description []:  
Author [kumamoto <hoge@example.com>, n to skip]:  
License []:  MIT
Compatible Python versions [^3.8]:  ^3.9       

Would you like to define your main dependencies interactively? (yes/no) [yes] no
Would you like to define your development dependencies interactively? (yes/no) [yes] no
Generated file

[tool.poetry]
name = "poet-practice"
version = "0.1.0"
description = ""
authors = ["kumamoto <onioni9999nagare@gmail.com>"]
license = "MIT"

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"


Do you confirm generation? (yes/no) [yes] 
Kumamoto-HamachiKumamoto-Hamachi
$ poetry env use 3.9.6
Creating virtualenv poet-practice-O7JUgyXW-py3.9 in /home/kumamoto/.cache/pypoetry/virtualenvs
Using virtualenv: /home/kumamoto/.cache/pypoetry/virtualenvs/poet-practice-O7JUgyXW-py3.9

仮想環境が{cache-dir}/virtualenvsに作られる。{cache-dir}はUnix系ならデフォだと~/.cache/pypoetry/virtualenvs

$ cd ~/.cache/virtualenv
$ ls
envs.toml  poet-practice-O7JUgyXW-py3.9

$ cat envs.toml
[poet-practice-O7JUgyXW]
minor = "3.9"
patch = "3.9.6"
Kumamoto-HamachiKumamoto-Hamachi

poetryの用意してくれた仮想環境に入る。
グローバルな環境を元に戻してももちろん仮想環境に影響は出ないので大丈夫

$ pyenv global 3.8.2
$ python --version
Python 3.8.2

$ poetry shell;
Spawning shell within /home/kumamoto/.cache/pypoetry/virtualenvs/poet-practice-O7JUgyXW-py3.9
. /home/kumamoto/.cache/pypoetry/virtualenvs/poet-practice-O7JUgyXW-py3.9/bin/activate
$ . /home/kumamoto/.cache/pypoetry/virtualenvs/poet-practice-O7JUgyXW-py3.9/bin/activate

-- 仮想環境に入ったあと
(poet-practice-O7JUgyXW-py3.9) $ python --version
Python 3.9.6
Kumamoto-HamachiKumamoto-Hamachi

{cache-dir}/virtualenvs下のenvs.tomlの値を書き換えても、バージョン変更出来る。

※ただしpyenvで必要なバージョンのPythonを入れて、pyproject.tomlなどの記述も必要な箇所書き換えていく必要はある。

Kumamoto-HamachiKumamoto-Hamachi

必要なパッケージを入れる

$ poetry add django@3.2
$ poetry add --dev mypy
--dev (-D): Add package as development dependency.
--path: The path to a dependency.
--optional : Add as an optional dependency.
--dry-run : Outputs the operations but will not execute anything (implicitly enables –verbose).
--lock : Do not perform install (only update the lockfile).

パッケージは下記に入っている。

~/.cache/pypoetry/virtualenvs/仮想環境名/lib/pythonバージョン名/site-packages

Kumamoto-HamachiKumamoto-Hamachi

依存をインストール

$ poetry install
  • poetry.lockがない時

pyproject.tomlに基づいて出来る限り最新のバージョンのパッケージが入る。
また、poetry.lockが新規に生成される。

  • poetry.lockがある時

poetry.lockに記載通りのバージョンのパッケージが入る。

Kumamoto-HamachiKumamoto-Hamachi

pyenv 入れ方

下記に従って入れる。

pyenvの基本

TODO

pyenv install --listで必要なバージョンがリストになかった場合

pyenv install --listはインストール可能なバージョン一覧を表示してくれる。
ただpyenv自体が古いと最新のバージョンが載っていないこともある。(つまりインストール出来ない)

pyenvのアップデートはpyenv-updateがおすすめ。