Poetryでpython仮想環境を構築する
Poetryとは
poetryとはpipと同じくpythonのパッケージマネージャで、JavaScriptで言う所のnpmをイメージすれば良いだろう。
pipはrequirements.txtファイルを使用してパッケージ間の依存関係を管理するが、パッケージが多くなってくると依存関係が深くなってくるため自動で依存解決するのが難しくなってくる。
そこで出てくるのがpoetryで、こちらは依存関係をより正確に制御するためバージョンの衝突を自動的に解決することができる。
またpoetryは仮想環境の作成と管理もできるのでその点も一応はメリットだ。
Poetryをインストールする
公式で提示されている方法に従ってインストールコマンドを叩いていこう。
今回はインストール先(POETRY_HOME)を指定して実行した。デフォルトだと、”~/.local/”にインストールされるようだ。
ibismark@ibismark-win:~$ pyenv version
3.12.1 (set by /home/ibismark/library/pyenv/version)
ibismark@ibismark-win:~$
ibismark@ibismark-win:~$ echo ${L_LIBRARY}
/home/ibismark/library
ibismark@ibismark-win:~$
ibismark@ibismark-win:~$ curl -sSL https://install.python-poetry.org | POETRY_HOME=${L_LIBRARY}/poetry python -
Retrieving Poetry metadata
# Welcome to Poetry!
This will download and install the latest version of Poetry,
a dependency and package manager for Python.
It will add the `poetry` command to Poetry's bin directory, located at:
/home/ibismark/library/poetry/bin
You can uninstall at any time by executing this script with the --uninstall option,
and these changes will be reverted.
Installing Poetry (1.7.1): Done
Poetry (1.7.1) is installed now. Great!
To get started you need Poetry's bin directory (/home/ibismark/library/poetry/bin) in your `PATH`
environment variable.
Add `export PATH="/home/ibismark/library/poetry/bin:$PATH"` to your shell configuration file.
Alternatively, you can call Poetry explicitly with `/home/ibismark/library/poetry/bin/poetry`.
You can test that everything is set up by executing:
`poetry --version`
ibismark@ibismark-win:~$
ibismark@ibismark-win:~$
インストールが終わると、(僕の場合は)/home/ibismark/library/poetry/binにPATHを通せと指示されたので、ログイン時にPATHが通る用に.profileへ環境変数の設定を行った。
これでpoetryコマンドが使用可能になった。
ibismark@ibismark-win:~$ vi ~/.profile
・・・
export POETRY_HOME="$L_LIBRARY/poetry"
export PATH="$POETRY_HOME/bin:$PATH"
・・・
ibismark@ibismark-win:~$ source ~/.profile
ibismark@ibismark-win:~$ poetry --version
Poetry (version 1.7.1)
Poetryの初期設定
ibismark@ibismark-win:~$ cd ~/workspace/otam/
ibismark@ibismark-win:~/workspace/otam$ rm -rf .venv3.12.1/
次のコマンドを実行すると、pyproject.tomlというファイルが作成される。
途中インタラクティブな入力を求められるのだが、後からpyproject.toml内の必要なプロパティを手動で変更できるので何も入力せずに全てEnterしちゃっておーけーだ。
ibismark@ibismark-win:~/workspace/otam$ poetry init -C ~/workspace/otam
・・・
(インタラクティブな入力を求められるが入力せず全部Enterで良い)
・・・
ibismark@ibismark-win:~/workspace/otam$ ls -l ~/workspace/otam/
・・・
-rw-r--r-- 1 ibismark ibismark 263 Feb 15 23:00 pyproject.toml
ibismark@ibismark-win:~/workspace/otam$
ibismark@ibismark-win:~/workspace/otam$ vi pyproject.toml
[tool.poetry]
name = "otam"
↓
name = "otam_server"
ibismark@ibismark-win:~/workspace/otam$
ibismark@ibismark-win:~/workspace/otam$ cat pyproject.toml
[tool.poetry]
name = "otam_server"
version = "0.1.0"
description = ""
authors = ["Nao <*****@gmail.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.12"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Poetryは自動でvenv環境を作成してくれるのだが、次のコマンドはそのvenv環境をどこに配置するかを設定することができる。
trueにするとそのプロジェクトの中にvenvが作成されるし、falseにするとデフォルトでは~/.cache/pypoetry/にvenvが作成される。
ibismark@ibismark-win:~/workspace/otam$ poetry config virtualenvs.in-project true --local
# virtualenvs.in-projectがtrueになってればおーけー
ibismark@ibismark-win:~/workspace/otam$ poetry config --list --local
cache-dir = "/home/ibismark/.cache/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = true
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs" # /home/ibismark/.cache/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true
ibismark@ibismark-win:~/workspace/otam$
ibismark@ibismark-win:~/workspace/otam$ ls -l ~/workspace/otam
・・・
-rw------- 1 ibismark ibismark 32 Feb 15 23:25 poetry.toml
Poetryを使ってDjango5.0をインストールする
次のコマンドで依存関係を含んだインストール情報を構成した上で、Djangoパッケージをインストールする。
ibismark@ibismark-win:~$ cd ~/workspace/otam/
ibismark@ibismark-win:~/workspace/otam$ poetry add Django==5.0.2
Creating virtualenv otam in /home/ibismark/workspace/otam/.venv
Updating dependencies
Resolving dependencies... (0.2s)
Package operations: 3 installs, 0 updates, 0 removals
• Installing asgiref (3.7.2)
• Installing sqlparse (0.4.4)
• Installing django (5.0.2)
Writing lock file
ibismark@ibismark-win:~/workspace/otam$ ls -l
・・・
-rw-r--r-- 1 ibismark ibismark 2271 Feb 15 23:51 poetry.lock
ibismark@ibismark-win:~/workspace/otam$
ibismark@ibismark-win:~/workspace/otam$ cat pyproject.toml
・・・
[tool.poetry.dependencies]
python = "^3.12"
django = "5.0.2"
・・・
# インストールされたパッケージ一覧
# djangoはasgirefとsqlparseに依存しているので、djangoをインストールすると一緒に引っ付いてくる
ibismark@ibismark-win:~/workspace/otam$ poetry show
asgiref 3.7.2 ASGI specs, helper code, and adapters
django 5.0.2 A high-level Python web framework that encourages rapid development and clean, pragmatic design.
sqlparse 0.4.4 A non-validating SQL parser.
# 依存関係を分かりやすくグラフィカルに出力
ibismark@ibismark-win:~/workspace/otam$ poetry show -t
django 5.0.2 A high-level Python web framework that encourages rapid development and clean, pragmatic design.
├── asgiref >=3.7.0,<4
├── sqlparse >=0.3.1
└── tzdata *
Djangoの動作確認を行う
仮想環境に入る際は、従来通りsourceコマンドを使うのも良いし、poetryがpoetry shellというラッパーコマンドを用意してくれているのでそっちを使うのも良いだろう。
ibismark@ibismark-win:~/workspace/otam/otam_server$ poetry shell
or
ibismark@ibismark-win:~/workspace/otam$ source .venv/bin/activate
(otam-py3.12) ibismark@ibismark-win:~/workspace/otam$ cd otam_server/
(otam-py3.12) ibismark@ibismark-win:~/workspace/otam/otam_server$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
February 15, 2024 - 16:40:25
Django version 5.0.2, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
この記事が気に入ったらサポートをしてみませんか?