🤖

Python の開発環境

2023/06/12に公開

pip と pyenv で止まってる。どのコマンドがどの機能を使っていて、どのファイルやフォルダがどのコマンドと関連しているのかまるでわからないので調べた。

pip

pip: Python環境構築ガイド - python.jp

pip は、The Python Package Index に公開されているPythonパッケージのインストールなどを行うユーティリティで、Python 3.4以降には、標準で付属しています。

Node.js の npm みたいなものだと思っている。

requirements.txt は pip で入れた依存ライブラリの一覧が管理されるファイル。 Node.js でいう package-lock.json に近いと思っている。

pyenv

https://github.com/pyenv/pyenv

pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

This project was forked from rbenv and ruby-build, and modified for Python.

Node.js の nodenvnvm みたいなものだと思っている。

.python-version ファイルは pyenv 用のやつ。そのフォルダ配下のデフォルトの python バージョンを pyenv に指示する。

virtualenv

仮想環境: Python環境構築ガイド - python.jp

Python を使って開発や実験を行うときは、用途に応じて専用の実行環境を作成し、切り替えて使用するのが一般的です。こういった、一時的に作成する実行環境を、「仮想環境」 と言います。

プロジェクトごとに Python のバージョンとか分けたいと。

ここでは、Python3 の標準ライブラリである venv で仮想環境を作成する方法を紹介します。

といいつつ次のステップが pip install virtualenv になっている。

virtualenv == venv ???

venvとvirtualenvの違い - 🍊miyamonz🍊

virtualenvの一部機能がvenvとして切り出されて、それは標準に取り込まれた
virtualenvは引き続きその他の機能を有しており、実際2020現在も開発は継続されているっぽい

なるほど。

.venv フォルダは、 virtualenv でよく使われる、その仮想環境の情報や依存ライブラリが格納される。 .venv という名前はデファクトな慣例であって仕様ではないよう。

Homebrew でも入る。 brew install virtualenv

pyenv-virtualenv

pyenv/pyenv-virtualenv: a pyenv plugin to manage virtualenv (a.k.a. python-virtualenv)

pyenv-virtualenv is a pyenv plugin that provides features to manage virtualenvs and conda environments for Python on UNIX-like systems.

UNIX 系システム上の Python の virtualenv および conda 環境を管理する機能を提供するpyenvプラグインです。

Homebrew でも入る。 brew install pyenv-virtualenv

Python のバージョンが同じでも異なる環境を作ることができる。
なぜなら、プロジェクトが違えば、たまたま Python バージョンが同じでもそれは別の 環境(仮想環境)として管理したい。

poetry

https://github.com/python-poetry/poetry

Python のパッケージマネージャの1つで pip の同類で後発。

Node.js の yarn や pnpm に近いポジショニングだと思ってる。

  • pyproject.tomlpoetry newpoetry init で作成される プロジェクトの設定ファイル。 Node.js でいう package.json に近いと思ってる。
  • ちなみに poetry export -o requirements.txt --without-hashes などとすればいつもの requirements.txt 形式を出力することもできる。
  • poetry.lockpoetry install したりすると作られる書く依存ライブラリのバージョン情報などを格納したファイル。 Node.js でいう 'package-lock.json' に近い。 Python 標準のフォーマット。
  • poetry.tomlpoetry config -local コマンドなどで書き込まれる、 このプロジェクトだけの poetry 自体の設定を保持するファイル。 ちまたの記事は pyproject.tomlpoetry.toml がごっちゃになっているものがいくつかある。

参考

Linter とか Formatter とかの開発環境ツールいろいろ

isort   # Formatter: import 並び替え
black   # Formatter: '' が "" に全部変更された。。
flake8  # Linter
mypy    # Linter: 型ヒントのチェック
pysen   # 上記4つの実行オーガナイザ。 pysen run lint で全部実行できる。

参考

Discussion