python パッケージのツールはdistutils, setuptools, pip, pipenv といろいろあって、用語が混乱してきたのでまとめてみた。
easy_install (setuptools)
- easy_install -e の editable mode はバージョン解決をしてダウンロードするところまで。
- パッケージ名指定で、pypi で名前解決する。URL不可。
- editable mode での展開ディレクトリは明示的に指定しないといけない。
- setup.py develop で symlink を使った install が行われる (egg-link)
pip
- pip install -e の editable mode は setuptools の develop mode に相当
- pypi での名前解決不可で、ローカルあるいは git (VCS) 管理の URL を使う。
- (pip install git+https://.... みたいな)
- 展開ディレクトリ(
--src
で指定可)は、デフォルトの位置が用意されている
- pypi での名前解決不可で、ローカルあるいは git (VCS) 管理の URL を使う。
pipenv
- pipenv install -e の editable mode は egg-link でインストールを行う。
- pypi での名前解決可能で、パッケージ名指定できる。
- git (VCS) 管理の URL も使える。VCS 経由のものはeditable にすべき。
- editable として展開されている場所は pip 同様規定値が使われる。
-
--dev
は [dev-packages] に区分けされて Pipfile に入る。egg-link とは関係ない。-
--dev
は他の環境でインストールするときに効く。 - pipenv install --dev で packages と dev-packages の両方が入る。
- 典型的には
tests_require
で指定していたようなパッケージが該当する
-
補足
pypi は python package index で、PEP 503 に仕様がある。simple repository APIという、たいへん検索しにくい名称。中身は API というよりは、ファイルレイアウトの規則になっている。
dev-packages や tests_require といった「条件によってインストールするか決める」というものは、これらの特別なオプションを使わずに、extras の一つとして設定するという方法もあります。
pip の dependency resolver が変更されて、egg-link を使いにくい状況になってきています。pipenv の editable mode も時と場合によって使い分けたほうがよさそう。