Help us understand the problem. What are the problem?

More than 1 year has passed since last update.


python packaging の editable と develop mode のこと

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 install -e の editable mode は setuptools の develop mode に相当
    • pypi での名前解決不可で、ローカルあるいは git (VCS) 管理の URL を使う。
      • (pip install git+https://.... みたいな)
    • 展開ディレクトリ(--src で指定可)は、デフォルトの位置が用意されている


  • 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 も時と場合によって使い分けたほうがよさそう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
Help us understand the problem. What are the problem?