54751
# 背景

Pipenvを勉強しています。

以下のサイトには、次のように書かれれていますが、意味が分かりませんでした。

> Pipenvに編集可能なパスとしてインストールするよう指示できます —
> この機能は、パッケージの開発作業をしているときに、現在の作業ディレクトリを指すのに便利なことが多いです:
```

    $ pipenv install --dev -e .
    
    $ cat Pipfile
    ...
    [dev-packages]
    "e1839a8" = {path = ".", editable = true}
    ...
    
```

<https://pipenv-ja.readthedocs.io/ja/translate-ja/basics.html#editable-
dependencies-e-g-e>

# 質問

上記の説明は、どのような意味でしょうか？

  * 「編集可能なパス」とは何か？
  * 「パス」は何のパスか？
  * 「パス」は編集できるものなのか？
  * 「現在の作業ディレクトリを指すのに便利な」ときは、いつか？

英語サイトも確認しましたが、分かりませんでした。

> You can tell Pipenv to install a path as editable — often this is useful for
> the current working directory when working on packages:

# 分かっていること

setup.pyとPipfileの両方を使うとき、Pipfileに`{path = ".", editable =
true}`を書く必要があることは、知っています。  
以下のサイトを参考にしました。  
<https://qiita.com/tonluqclml/items/b09f4a5ed04ebcbd0af1>  
<https://github.com/kennethreitz/requests/blob/master/Pipfile>

「`pip
install`できるようsetup.pyの`install_package`に必要な依存パッケージを書いて、それをPipfileが参照できるようにするため」だという認識です。
CC BY-SA 4.0
2019-05-05T12:02:58.517
54746
2019-05-05T14:44:30.283
19524
question
python pipenv
Pipenvのオプション`--editable`の意味を教えてください。
私も勉強中ですが、以下のようなことだと思います。

  * 「編集可能なパス」ではなく、「指定されたパス」にあるファイル/パッケージは「編集される可能性があるものとして扱う」の方が相応しいのだと思われます。
  * 「パス」は「開発しようとしているパッケージのルートフォルダ」だったり、「GitHub等のリポジトリ」だったりするでしょう。  
pipenvの[バージョン管理システムについての但し書き](https://pipenv-ja.readthedocs.io/ja/translate-
ja/basics.html#a-note-about-vcs-dependencies)等を参照

  * 「パス」自身も編集はできると思われます。
  * 「現在の作業ディレクトリを指すのに便利な」ときは、「開発を始めるとき」とか、「パッケージとしてまとめる作業を始めるとき」と思われます。

* * *

以下に「pipenv は pip + virtualenvの統合」という記事があり、後に紹介している pip の情報が、pipenv
にも当てはまると思われます。

[2019年に向けてPythonのモダンな開発環境について考える](https://techblog.asahi-
net.co.jp/entry/2018/11/19/103455)

> **setup.py との併用  
>  Pipenv は基本的に pip + virtualenv を統合したツールであり、setuptools
> のレイヤーを置き換えるツールではありません（重要）**。 アプリケーションでなくライブラリを書く場合やパッケージを wheel
> 形式で配布したい場合など、setuptools の機能が必要な場面では引き続き setup.py を書く必要があります。
>
> **「実行に必要なパッケージは setup.py で管理し、開発に必要なパッケージは Pipfile で管理する」**
> という方法でパッケージを管理する例です。 これは Pipenv 自身の setup.py と Pipfile で採用されている手法です。
>
> まず、dev-package として自身 (.) を追加し、setup.py で extras_require の dev として指定していた内容を
> Pipfile に移動させます。
```

>     PIPENV_VENV_IN_PROJECT=true pipenv install -de .  # 自身を dev-packages
> として追加（-e: --editable）
>     pipenv install -d 'pytest>=3' coverage tox sphinx     # その他 dev-packages
> を追加
>  
```

>
> Pipfile は以下のようになります。
```

>     [packages]
>  
>     [dev-packages]
>     python-boilerplate = {editable = true, path = "."}
>     pytest = ">=3"
>     coverage = "*"
>     tox = "*"
>     sphinx = "*"
>  
```

>
> 開発者は常に pipenv install -d で開発環境を作成し、その仮想環境を使って開発します。 setup.py
> に書かれている実行に必要な依存パッケージ (install_requires) を変更した場合は pipenv update -d コマンドを実行すると
> Pipfile.lock と virtualenv 環境にインストールされているパッケージを更新できます。

* * *

**以下は pip の情報。**

[【Python】pipの使い方](https://www.task-notes.com/entry/20150810/1439175600)

> PyPI以外からインストール  
>  パッケージをPyPI以外（ローカルやVCS）からインストールしたい場合は-e/--editable オプションを指定します。
```

>     $ pip install -e git+git@git.myproject.org:MyProject#egg=MyProject
>  
```

[Python
Tips：パッケージの開発版をインストールしたい](https://www.lifewithpython.com/2018/07/python-
install-package-dev-versions.html)

> おまけ A: editable mode でのインストール  
>  pip でのインストールには editable mode
> というモードが用意されています。これはパッケージ開発時に便利な機能で、コードが編集可能な状態でパッケージをインストールできるものです。
>
> editable mode でインストールされたパッケージのコードに変更を加えると、再インストールをしなくてもそのまま実行環境に反映されます。  
>  editable mode を有効にするには -e （ --editable ）オプションを使用します。
```

>     $ pip install -e hello/
>  
```

>
> editable mode は、ローカルにファイルのあるパッケージだけでなく、通常のディストリビューションパッケージや Git
> リポジトリ上のパッケージの場合でも利用することができます。その際は pip install
> 実行時に出力されるパッケージのダウンロード先パスを確認してそこのファイルを編集すると OK です。
>
> おまけ B: Pipenv でのインストール  
>  Pipenv を使った場合でも上のパターンを利用することができます。

[「開発モード」での作業](https://python-packaging-user-guide-
ja.readthedocs.io/ja/latest/distributing.html#id25)

> 必須ではないが、作業中のプロジェクトを “editable” または “develop”
> と呼ばれるモードでローカルにインストールするのが一般的だ。これにより、インストールしたプロジェクトをそのまま編集できる。  
>  今プロジェクトのルートディレクトリにいるとしよう。以下を実行する:
```

>     pip install -e .
>  
```

>
> いくぶん暗号的だが、 -e は --editable の短縮形で、 . はカレントディレクトリを指す。つまり、カレントディレクトリ(プロジェクト)を
> editable モードでインストールするという意味だ。これは “install_requires” で宣言された依存パッケージ、および
> “console_scripts” で宣言されたスクリプトも全てインストールする。このときインストールされる依存パッケージは editable
> モードにはならない。
>
> 依存パッケージも editable モードでインストールしたいというのはよくあることだ。例えば、プロジェクトが “foo” と “bar”
> を必要としているが、 “bar” は VCS から editable モードでインストールしたいとしよう。その場合、requirements
> ファイルは以下のように書ける:
```

>     -e .
>     -e git+https://somerepo/bar.git#egg=bar
>  
```

>
> 1 行目はプロジェクトと依存パッケージ全てをインストールすると宣言している。2 行目は依存パッケージ “bar” を PyPI からではなく VCS
> から取得するようにオーバーライドしている。Requirements ファイルの詳細は、pip ドキュメントの Requirements File
> セクションを見よ。VCS インストールの詳細は、pip ドキュメントの VCS Support セクションを見よ。

* * *

ちょっと注目点が違うのですが、類似の疑問に対する情報をまとめた記事があるようです。

[python packaging の editable と develop mode
のこと](https://qiita.com/kwi/items/4840767f3b07d0300127)

* * *

さらに別に、Poetry というものも新しく出てきたようです。

[ライブラリ： Poetry](https://www.lifewithpython.com/2018/12/poetry.html)  
[Poetry: Python の依存関係管理とパッケージングを支援するツール](https://org-
technology.com/posts/python-poetry.html)  
[Pipenv から Poetry
への乗り換え](http://kk6.hateblo.jp/entry/2018/12/17/Pipenv_%E3%81%8B%E3%82%89_Poetry_%E3%81%B8%E3%81%AE%E4%B9%97%E3%82%8A%E6%8F%9B%E3%81%88)  
[Poetryを使ったPythonパッケージ開発からPyPI公開まで](http://kk6.hateblo.jp/entry/2018/12/20/124151)

[Poetryのここが判らない](https://qiita.com/tonluqclml/items/5390900239bf44d6e1d0)
CC BY-SA 4.0
2019-05-05T14:44:30.283
54751
2019-05-05T14:44:30.283
26370
54746
answer