Poetry + Pyenv使い方(備忘録)
PyenvとPoetryずっと使ったことがなかったけど、
Python開発ばかりしているので、さすがにどんなものかぐらいは知っておく必要ある。
Pyenvの使い方
Pythonのバージョンを複数管理してプロジェクト毎で切り替えできるようにするツール。Node.jsの開発だと、nvmみたいな感じのツールだと思っている。
Pyenvインストール (Windows11版)
Windowsの場合は、pyenv-winを使う。
コマンドプロンプトで、リポジトリをクローンする。クローン先はホームディレクトリ直下の.pyenv
とする。
> git clone https://github.com/pyenv-win/pyenv-win.git "%USERPROFILE%\.pyenv"
Cloning into '%USERPROFILE%\.pyenv'...
remote: Enumerating objects: 3250, done.
remote: Counting objects: 100% (540/540), done.
remote: Compressing objects: 100% (137/137), done.
remote: Total 3250 (delta 461), reused 428 (delta 403), pack-reused 2710
Receiving objects: 100% (3250/3250), 3.63 MiB | 36.80 MiB/s, done.
Resolving deltas: 100% (2114/2114), done.
Windowsだと、中途半端にPythonがインストール??されているので、Windowsの設定でエイリアスをOFFにする。
[スタート] → [設定] → [アプリ] →[アプリの詳細設定] の [アプリ実行エイリアス]をクリックし、アプリインストーラー python.exe と python3.exe の両方をオフにする
最後にインストール先のディレクトリを環境変数PATHに設定する
PYENV="%USERPROFILE%\.pyenv"
PATH="%USERPROFILE%\.pyenv\pyenv-win\bin;%USERPROFILE%\.pyenv\pyenv-win\shims;%PATH%"
pyenv
コマンドが認識されればOK
> pyenv --version
pyenv 3.1.1
pyenvでPythonをインストール
--list
でインストール可能なバージョン一覧を表示する
> pyenv install --list
:
3.8.9
3.8.10-win32
3.8.10
3.9.0a3-win32
3.9.0a5-win32
:
バージョンを指定してインストール後、pyenv global versionで利用バージョンを指定する
> pyenv install 3.8.10
:: [Downloading] :: 3.8.10 ...
:: [Downloading] :: From https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe
:: [Downloading] :: To %USERPROFILE%\.pyenv\pyenv-win\install_cache\python-3.8.10-amd64.exe
:: [Installing] :: 3.8.10 ...
> pyenv global 3.8.10
現在のバージョンを確認
> python --version
Python 3.8.10
> python3 --version
Python 3.8.10
> pip --version
pip 21.1.1 from %USERPROFILE%\.pyenv\pyenv-win\versions\3.8.10\lib\site-packages\pip (python 3.8)
> python -m pip install --upgrade pip
Poetryの使い方
最新のインストールスクリプトをダウンロードしてインストールする
>curl -sSL https://install.python-poetry.org | python -
# 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:
%USERPROFILE%\AppData\Roaming\Python\Scripts
You can uninstall at any time by executing this script with the --uninstall option,
and these changes will be reverted.
Installing Poetry (1.8.3)
Installing Poetry (1.8.3): Creating environment
Installing Poetry (1.8.3): Installing Poetry
Installing Poetry (1.8.3): Creating script
Installing Poetry (1.8.3): Done
Poetry (1.8.3) is installed now. Great!
To get started you need Poetry's bin directory (%USERPROFILE%\AppData\Roaming\Python\Scripts) in your `PATH`
environment variable.
Alternatively, you can call Poetry explicitly with `%USERPROFILE%\AppData\Roaming\Python\Scripts\poetry`.
You can test that everything is set up by executing:
`poetry --version`
上記のパスを参考に環境変数PATHに追加する。(配下にpoetry.exeがある)
PATH="%USERPROFILE%\AppData\Roaming\Python\Scripts;%PATH%"
コマンドプロンプトを開いて、poetryのバージョン確認できればOK
>poetry --version
Poetry (version 1.8.3)
仮想環境をプロジェクト直下に作成されるように設定変更しておく
> poetry config virtualenvs.in-project true
今回はWindows環境にインストールしたが、Linuxもほぼ同じ。
Poetryの使い方
1a. 何もない状態から新規作成(poetry new)
Pythonパッケージの標準的なディレクトリ構成で自動的にファイルを作ってくれる。
> poetry new sample-proj1
sample-proj1
├ sample-proj1
│ └ __init__.py
├ tests
│ └ __init__.py
├ pyproject.toml
└README.md
1b. 既にプロジェクトフォルダがある場合(poetry init)
既存プロジェクトフォルダ配下でpoetry init
を実行
> cd test-project
> poetry init
Package name [test-project]:
Version [0.1.0]:
Description []: test project
Author [XXX XXX <xxx.xxx@xxx.co.jp>, n to skip]: n
License []:
Compatible Python versions [^3.8]:
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
2. 仮想環境セットアップ
poetry newまたは、poetry initで作成されたpyproject.tomlに使用する依存モジュールなどが定義される。Node.jsのpackage.json
とほぼ同等のファイルになる。
作成直後では、依存モジュールは何も定義されてない。poetry addで利用するモジュールを追加すると仮想環境下に依存モジュールがインストールされる。
requests
を利用する場合は、以下のように追加する。
> poetry add requests
pyproject.tomlを見ると、依存モジュールとして追加されていることが分かる。
[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.32.3"
リポジトリからダウンロードばかりのプロジェクトの場合、pyproject.tomlだけ存在しており、仮想環境は存在しない。この定義ファイルの内容を元に環境を作成したい場合は、poerty installで仮想環境が作成される。
> cd sample-proj1
> poetry install
2. 仮想環境内での作業
poetry shellコマンドで、仮想環境に切り替える。
> poetry shell
(sample-proj1-py3.8) xxx>
あとはいつも通りのコマンドが実行できる
(sample-proj1-py3.8) xxx> pip list
Package Version Editable project location
------------------ -------- -----------------------------------------------------------------------------------
certifi 2024.7.4
charset-normalizer 3.3.2
idna 3.7
pip 24.1
requests 2.32.3
setuptools 70.1.0
urllib3 2.2.2
簡単なサンプルを実行してみる。
# sample-proj1/test.py
import requests
url = 'https://jsonplaceholder.typicode.com/posts/1'
response = requests.get(url)
print(response.status_code)
print(response.json())
(sample-proj1-py3.8) xxx> python test.py
200
{'userId': 1, 'id': 1, 'title': 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', 'body': 'quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto'}
poetry run
コマンドを使うと、仮想環境の切り替えなしに実行することもできる。(内部でactivate/deactivateされる感じ)
> poetry run pip list
> poetry run python test.py
3. reuqirements.txtを出力
> poetry export -f requirements.txt --output requirements.txt
Discussion