💻

Poetry + Pyenv使い方(備忘録)

2024/08/09に公開

PyenvPoetryずっと使ったことがなかったけど、
Python開発ばかりしているので、さすがにどんなものかぐらいは知っておく必要ある。

https://qiita.com/ksato9700/items/b893cf1db83605898d8a

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.exepython3.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の使い方

https://python-poetry.org/docs/#installing-with-the-official-installer

最新のインストールスクリプトをダウンロードしてインストールする

>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