Open7
Python開発環境の構築
目標
PyPiで提供するPythonモジュールを開発するプロジェクトの開発環境を構築する。
要件
- なるべく最新のデファクトツールを利用する
- 複数の開発者で環境を共通化できる
環境構築手順
利用ツールとバージョン
- Python 12.x
-
pip→ uv -
poetry→ rye - ruff
- pytest
参考
インストールコマンド
curl -sSf https://rye.astral.sh/get | RYE_INSTALL_OPTION="--yes" bash
source "$HOME/.rye/env"
パッケージインストール
開発環境に依存するパッケージは以下のようにインストールする
rye add --dev [myproject] --git=https://github.com/[organization]/[myproject].git --branch dev
パッケージを更新する場合は
rye sync
RyeのPublishエラー
エラー内容
importlib-metadata によりエラー
- https://github.com/abichinger/semantic-release-pypi/pull/39
- https://github.com/astral-sh/rye/issues/1180
- https://github.com/astral-sh/rye/issues/1180
確認方法
エラー確認方法
$ ~/.rye/self/bin/twine --version
Traceback (most recent call last):
File "/home/vscode/.rye/self/bin/twine", line 5, in <module>
from twine.__main__ import main
File "/home/vscode/.rye/self/lib/python3.12/site-packages/twine/__init__.py", line 43, in <module>
__license__ = metadata["license"]
~~~~~~~~^^^^^^^^^^^
File "/home/vscode/.rye/self/lib/python3.12/site-packages/importlib_metadata/_adapters.py", line 54, in __getitem__
raise KeyError(item)
KeyError: 'license'
エラー時のバージョン
$ rye --version
rye 0.35.0
commit: 0.35.0 (a1dbc56d4 2024-06-24)
platform: linux (aarch64)
self-python: cpython@3.12.3
symlink support: true
uv enabled: true
$ rye run twine --version
twine version 5.0.0 (importlib-metadata: 8.0.0, keyring: 25.2.1, pkginfo: 1.11.1, requests: 2.32.3, requests-toolbelt: 1.0.0, urllib3: 2.2.2)
回避方法
ローカルにtwineの5.1.1 をインストールし、ryeの組み込みではなくそちらを使ってアップロードする。
twineインストール
$ rye add -d twine==5.1.1
TestPyPIにアップロード
$ rye run twine upload -r testpipy --repository-url https://test.pypi.org/legacy/ dist/*
開発環境のタイムゾーンの設定
他の利用者を考えるとコンテナのタイムゾーンを固定化したくないので、とりあえずコンテナ毎に以下を実施する。
echo export TZ=Asia/Tokyo >> ~/.bashrc
GitHub Actionsの追加
rye を使っているのでインストールして全てをryeで実施。
.github/workflows/python-check.yml
name: Python test and lint
on:
push:
branches: [ "dev", "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4
- name: Install the latest version of rye
run: |
curl -sSf https://rye.astral.sh/get | RYE_INSTALL_OPTION="--yes" bash
echo "$HOME/.rye/shims" >> $GITHUB_PATH
- name: Sync environment with rye
run: rye sync
- name: Lint with ruff
run: rye lint
- name: Test with pytest
run: rye test