Python の Pipenv を使ってみました

Pipenv というものがあることを知りました。 ので、使ってみたいと思います。

環境

  • Ubuntu 18.04 LTS
  • Python 3.6.5
  • Pipenv 2018.5.18

Pipenv?

Pipenv は、全てのパッケージングの世界 (bundler、composer、npm、cargo、yarnなどなど。) における最高のものをPythonの世界にもたらすことを目的としたツールです。 我々の世界ではWindowsは第一級市民です。

Pipenv: 人間のためのPython開発ワークフロー — pipenv 2018.05.18 ドキュメント

Pipenv は Ruby の bundler や Node.js の npm のようなものみたいです。

Pipenv is a project that aims to bring the best of all packaging worlds to the Python world. It harnesses Pipfile, pip, and virtualenv into one single toolchain. It features very pretty terminal colors.

Pipenv — Project Summaries — Python Packaging User Guide

Python の公式サイトにも Pipenv の記載がありました。 Pipfile と pip と virtualenv を一つのツールチェーンに統合したもののようです。

ソフトウェア分野におけるツールチェーン(英: toolchain)は、製品(典型的には他のコンピュータ用のプログラム、またはシステムプログラム)を製作するのに使われるプログラム(ツール)の集合体である。一つのツールの出力が他のツールの入力となり、連鎖的に使われることからツールチェーンと呼ばれる。

ツールチェーン

toolchain という単語をあまり使ったことがありませんでしたが、プログラム(ツール)の集合体のことみたいです。

Currently, there are two common tools for creating Python virtual environments:

  • venv is available by default in Python 3.3 and later, and installs pip and setuptools into created virtual environments in Python 3.4 and later.
  • virtualenv needs to be installed separately, but supports Python 2.6+ and Python 3.3+, and pip, setuptools and wheel are always installed into created virtual environments by default (regardless of Python version).

The basic usage is like so:

Using virtualenv:

virtualenv <DIR>
source <DIR>/bin/activate

Using venv:

python3 -m venv <DIR>
source <DIR>/bin/activate

For more information, see the [virtualenv](For more information, see the virtualenv docs or the venv docs.) docs or the venv docs.

Creating Virtual Environments

今までは python3 -m venv <DIR> を使って仮想環境を作って、仮想環境の中で pip を使ってパッケージをインストールしていました。 それぞれコマンドが異なるので面倒と言えば面倒でした。 仮想環境を作る方法も virtualenv と venv の 2 種類あったみたいで煩わしいですし。 それらが統合されたら嬉しいかもしれません。

それから、 virtualenv は、仮想環境を有効にするのに source <DIR>/bin/activate をして、無効にするのに deactivate をしなきゃいけません。 これはけっこう面倒でした。

もっと気になっているのは、仮想環境のディレクトリーを移動すると、また仮想環境を作り直さなきゃいけない (python3 -m venv <DIR>) ところです。 (コマンド 1 回だけ実行すれば済む話ですけれども) (--without-pip で仮想環境を作っている場合は python get-pip.py も実行する必要がありますけれども) これは、 <DIR>/bin/activate の中に記述されている仮想環境のディレクトリーへの絶対パスが、移動した先のディレクトリーのパスと相違してしまうためです。 すると source <DIR>/bin/activate をしても、正しい状態で仮想環境を有効にすることができません。 これは改善されているかな?

pip のインストール

pipを使いましょう:

$ pip install pipenv

あるいは、Ubuntu 17.10を使っている場合には次のようにします:

$ sudo apt install software-properties-common python-software-properties
$ sudo add-apt-repository ppa:pypa/ppa
$ sudo apt update
$ sudo apt install pipenv

そうでなくMacOSを使っている場合は、Homebrewで簡単にPipenvがインストールできます:

$ brew install pipenv

さぁ今すぐこれからPipenvをインストール!

Pipenv のインストールにはいくつか方法があるようです。 Ubuntu を使っているので apt を使うのがいいのかもしれません。 が、リポジトリーの追加とかあまりしたくないので pip を使おうと思います。

以前、 Ubuntu 16.04 LTS のときに記事にしましたが、 WSL の Ubuntu 18.04 にも pip がないので pip からインストールしてみます。 今まで pip なしで仮想環境を作って、その中に pip をインストールしていたのですが、 Pipenv でも仮想環境を作りたいです。 すると、 Pipenv のための仮想環境の中に、アプリケーションのための仮想環境を作れなきゃいけないことになるので、よくわからないことになりそうです。 Pipenv のための仮想環境を作るのに、毎回 python3 -m venv <DIR> を使うのも無意味な気がします。 せっかく Pipenv を使うなら Pipenv だけで済ませたいです。

シンプルにしたいので、素直に仮想環境の外に pip と Pipenv をインストールすることにしました。

To install pip, securely download get-pip.py. [1]:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

Installing with get-pip.py

pip をインストールするために get-pip.py をダウンロードします。

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1603k  100 1603k    0     0  2953k      0 --:--:-- --:--:-- --:--:-- 2953k

ダウンロードできました。

Inspect get-pip.py for any malevolence. Then run the following:

python get-pip.py

Installing with get-pip.py

ダウンロードした get-pip.py ファイルを python コマンドで実行してあげればいいみたいです。 ただ、このままだと /usr/ や /usr/local/ あたりのディレクトリーにインストールするようで、 sudo をつけてあげる必要があるみたいです。

Install to the user site [3]:

python get-pip.py --user

get-pip.py options

--user オプションをつけてあげるとユーザーのホームディレクトリーの中にインストールしてくれるみたいです。 こうすると、このユーザーしか使えなくなりますが、 sudo をつける必要がありません。 OS に近い領域を汚すことがないので、こっちの方がいいかな、と思っています。

Ubuntu 18.04 LTS の python は 3 なので python3 コマンドで実行しました。

$ python3 get-pip.py --user
Traceback (most recent call last):
  File "get-pip.py", line 20649, in <module>
    main()
  File "get-pip.py", line 197, in main
    bootstrap(tmpdir=tmpdir)
  File "get-pip.py", line 82, in bootstrap
    import pip._internal
  File "/tmp/tmpetizv62h/pip.zip/pip/_internal/__init__.py", line 42, in <module>
  File "/tmp/tmpetizv62h/pip.zip/pip/_internal/cmdoptions.py", line 16, in <module>
  File "/tmp/tmpetizv62h/pip.zip/pip/_internal/index.py", line 25, in <module>
  File "/tmp/tmpetizv62h/pip.zip/pip/_internal/download.py", line 35, in <module>
  File "/tmp/tmpetizv62h/pip.zip/pip/_internal/locations.py", line 10, in <module>
ImportError: cannot import name 'sysconfig'

エラーになりました。

It seems that python3-distutils is not installed.

sudo apt install python3-distutils

fix this issue.

ImportError: cannot import name ‘sysconfig’ · Issue #5356 · pypa/pip · GitHub

これと同じ状況みたいでした。

なので、最初に distutils をインストールすることにしました。

$ apt search python3-distutils
Sorting... Done
Full Text Search... Done
python3-distutils/bionic 3.6.5-3 all
  distutils package for Python 3.x

探してみたら標準のリポジトリーの中にありました。

インストールします。

$ sudo apt install python3-distutils
[sudo] password for user:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
  libfreetype6
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  python3-lib2to3
The following NEW packages will be installed:
  python3-distutils python3-lib2to3
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 217 kB of archives.
After this operation, 2118 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu bionic/main amd64 python3-lib2to3 all 3.6.5-3 [76.6 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic/main amd64 python3-distutils all 3.6.5-3 [141 kB]
Fetched 217 kB in 4s (61.1 kB/s)
Selecting previously unselected package python3-lib2to3.
(Reading database ... 28482 files and directories currently installed.)
Preparing to unpack .../python3-lib2to3_3.6.5-3_all.deb ...
Unpacking python3-lib2to3 (3.6.5-3) ...
Selecting previously unselected package python3-distutils.
Preparing to unpack .../python3-distutils_3.6.5-3_all.deb ...
Unpacking python3-distutils (3.6.5-3) ...
Setting up python3-lib2to3 (3.6.5-3) ...
Setting up python3-distutils (3.6.5-3) ...

python3-distutils がインストールできました。

改めて pip をインストールします。

$ python3 get-pip.py --user
Collecting pip
  Downloading https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 1.7MB/s
Collecting setuptools
  Downloading https://files.pythonhosted.org/packages/7f/e1/820d941153923aac1d49d7fc37e17b6e73bfbd2904959fffbad77900cf92/setuptools-39.2.0-py2.py3-none-any.whl (567kB)
    100% |████████████████████████████████| 573kB 3.6MB/s
Collecting wheel
  Downloading https://files.pythonhosted.org/packages/81/30/e935244ca6165187ae8be876b6316ae201b71485538ffac1d718843025a9/wheel-0.31.1-py2.py3-none-any.whl (41kB)
    100% |████████████████████████████████| 51kB 5.6MB/s
Installing collected packages: pip, setuptools, wheel
  The script wheel is installed in '/home/user/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-10.0.1 setuptools-39.2.0 wheel-0.31.1

インストールできました。

$ which pip
$

pip がありません。

$ which pip3
$

pip3 もありません。

と思ったら、インストールしたときに警告が出ていたことに気づきました。

The script wheel is installed in ‘/home/user/.local/bin’ which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use –no-warn-script-location.

環境変数の PATH に ~/.local/bin を設定してあげなければいけないようでした。

$ ls ~/.local/bin/pip
/home/user/.local/bin/pip
$ ls ~/.local/bin/pip3
/home/user/.local/bin/pip3

~/.local/bin の中には pip がちゃんとあるみたいでした。 なので、この ~/.local/bin ディレクトリーを環境変数の PATH に設定してあげれば使えるようになるみたいです。

設定しようと思って ~/.bashrc や ~/.profile を見ていたところ、 ~/.profile に次の記述がありました。

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

~/bin ディレクトリーや ~/.local/bin ディレクトリーが作られていると勝手に PATH に追加してくれるようでした。 なので、ここで Ubuntu を起動し直してみました。

$ echo $PATH
/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Users/q399/AppData/Local/Microsoft/WindowsApps:/mnt/c/Program Files/Microsoft VS Code/bin:/snap/bin

PATH に ~/.local/bin が追加されていました。

$ which pip
/home/user/.local/bin/pip
$ which pip3
/home/user/.local/bin/pip3

pip も pip3 も使える状態になりました。

$ pip -V
pip 10.0.1 from /home/user/.local/lib/python3.6/site-packages/pip (python 3.6)
$ pip3 -V
pip 10.0.1 from /home/user/.local/lib/python3.6/site-packages/pip (python 3.6)
$ pip3.6 -V
pip 10.0.1 from /home/user/.local/lib/python3.6/site-packages/pip (python 3.6)

Python3 しかないから、どの pip も同じバージョンみたいです。

Pipenv のインストール

pip が使える状態になったので Pipenv をインストールしてみます。

次の通り pip でPipenvをインストールしてください:

$ pip install --user pipenv

注釈

このコマンドは user installation を行い、システム全体に関わるパッケージを壊さないようにします。 インストールを行った後に pipenv が使えるようにならない場合は、 user base のバイナリディレクトリを PATH に追加する必要があります。

Pipenvのインストール

Pipenv も user installation できるみたいです。

user installation で Pipenv をインストールしてみます。

$ pip install --user pipenv
Collecting pipenv
  Downloading https://files.pythonhosted.org/packages/8d/fe/4faa519acfb984015dde4e2973d89e47baf6a9cd81e9d58e2f2d3c47fb6f/pipenv-2018.5.18-py3-none-any.whl (6.4MB)
    100% |████████████████████████████████| 6.4MB 2.3MB/s
Requirement already satisfied: setuptools>=36.2.1 in ./.local/lib/python3.6/site-packages (from pipenv) (39.2.0)
Requirement already satisfied: pip>=9.0.1 in ./.local/lib/python3.6/site-packages (from pipenv) (10.0.1)
Collecting virtualenv (from pipenv)
  Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
    100% |████████████████████████████████| 1.9MB 1.7MB/s
Collecting virtualenv-clone>=0.2.5 (from pipenv)
  Downloading https://files.pythonhosted.org/packages/6d/c2/dccb5ccf599e0c5d1eea6acbd058af7a71384f9740179db67a9182a24798/virtualenv_clone-0.3.0-py2.py3-none-any.whl
Requirement already satisfied: certifi in /usr/lib/python3/dist-packages (from pipenv) (2018.1.18)
Installing collected packages: virtualenv, virtualenv-clone, pipenv
Successfully installed pipenv-2018.5.18 virtualenv-16.0.0 virtualenv-clone-0.3.0

インストールできました。

仮想環境を作る

Pipenv manages dependencies on a per-project basis. To install packages, change into your project’s directory (or just an empty directory for this tutorial) and run:

cd myproject
pipenv install requests

Installing packages for your project

virtualenv みたいに仮想環境を作るという儀式は必要ないみたいです。

pipenv コマンドを使ってパッケージをインストールすると、必要な管理ファイルを作ってくれるみたいです。

cowsay · PyPI をインストールしてみようと思います。

$ pipenv install cowsay
Creating a virtualenv for this project…
Using /usr/bin/python3 (3.6.5) to create virtualenv…
⠋Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/user/.local/share/virtualenvs/myproject-O_i4omMD/bin/python3
Also creating executable in /home/user/.local/share/virtualenvs/myproject-O_i4omMD/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: /home/user/.local/share/virtualenvs/myproject-O_i4omMD
Creating a Pipfile for this project…                                                                                  Installing cowsay…
                                           Collecting cowsay
  Downloading https://files.pythonhosted.org/packages/8f/1f/37fbc878a11a2f2cdf680b74f4f8cd8cfbdf464779c6838a0914f2bcea3c/cowsay-1.0.tar.gz
Building wheels for collected packages: cowsay
  Running setup.py bdist_wheel for cowsay: started
  Running setup.py bdist_wheel for cowsay: finished with status 'done'
  Stored in directory: /home/user/.cache/pip/wheels/80/0f/31/20a2777be324396f835d0e0d38205214f4e2826e8bc09b643e
Successfully built cowsay
Installing collected packages: cowsay
Successfully installed cowsay-1.0

Adding cowsay to Pipfile's [packages]…
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (6800d4)!
Installing dependencies from Pipfile.lock (6800d4)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 1/1 — 00:00:00
To activate this project's virtualenv, run the following:
 $ pipenv shell

インストールできました。 インストールにはけっこう時間がかかった感じがします。 30 秒くらい待ったような。

$ ls
Pipfile  Pipfile.lock

2 つのファイルができました。

$ ls /home/user/.local/share/virtualenvs/myproject-O_i4omMD
bin  lib  pip-selfcheck.json

それから ~/.local/share/virtualenvs の下に仮想環境のディレクトリーが作られました。 この中に pip でインストールするパッケージとかが保存されるぽいです。

myproject-O_i4omMD を - で区切って、 myproject の部分は実際のディレクトリーの名前に対応しているみたいです。 後ろの O_i4omMD の部分は実際のディレクトリーの絶対パスに対するハッシュなのかな? 同じ名前のディレクトリーを別のパスのところに作ったら、この後ろの 8 桁のところだけ変わったものになりました。 /home/user/myproject の仮想環境を作って、削除して、もう一度作り直したら、また同じ myproject-O_i4omMD の名前で作られました。 なので、絶対パスで一意に識別できるようになっているぽいです。

Pipenvで作成された仮想環境は、予想したものと異なっているかもしれません。 危険な文字 (つまり、空白、ラインフィード、キャリッジリターン、タブだけでなく $`!*@” も) はアンダースコアに変換されます。 さらに、現在のフォルダのフルパスは 「スラッグ値」 にエンコードされ、仮想環境名が一意になるように末尾に追加されます。

Pipenvによる環境管理

それらしいことが書いてありました。 後ろの 8 桁は「スラッグ値」と呼ぶそうです。

パッケージを使う

Now that Requests is installed you can create a simple main.py file to use it:

import requests

response = requests.get('https://httpbin.org/ip')

print('Your IP is {0}'.format(response.json()['origin']))

Then you can run this script using pipenv run:

pipenv run python main.py

You should get output similar to this:

Your IP is 8.8.8.8

Using pipenv run ensures that your installed packages are available to your script. It’s also possible to spawn a new shell that ensures all commands have access to your installed packages with pipenv shell.

Using installed packages

Pipenv でインストールしたパッケージを使って動かすには pipenv run コマンドを使うみたいです。 source <DIR>/bin/activate をする代わりに、毎回 pipenv run で動かすことになります。 どうかな? 逆に面倒だと感じる人もいるかもしれないです。 けれども、わたしは pipenv run で動かす方がいいと感じます。

インストールした cowsay を使ってみます。

$ pipenv run python
Python 3.6.5 (default, Apr  1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cowsay
>>> cowsay.tux("Python is fun")
  _____________
< Python is fun >
  =============
                  \
                   \
                    \
                     .--.
                    |o_o |
                    |:_/ |
                   //   \ \
                  (|     | )
                 /'\_   _/`\
                 \___)=(___/


>>> exit()

インタプリターでも動かせました。

virtualenv みたいに終わった後に deactivate する必要がないところがいいです。

プロジェクトのディレクトリーの移動

virtualenv はプロジェクトのディレクトリーを移動すると python3 -m venv <DIR> し直す必要があったので、 Pipenv ではどうなのか確認してみました。

$ cd ..
$ mv myproject myproject2
$ cd myproject2
$ pipenv run python
Creating a virtualenv for this project…
Using /usr/bin/python3.6m (3.6.5) to create virtualenv…
⠋Running virtualenv with interpreter /usr/bin/python3.6m
Using base prefix '/usr'
New python executable in /home/user/.local/share/virtualenvs/myproject2-v0_H80Xk/bin/python3.6m
Also creating executable in /home/user/.local/share/virtualenvs/myproject2-v0_H80Xk/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: /home/user/.local/share/virtualenvs/myproject2-v0_H80Xk
Python 3.6.5 (default, Apr  1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

ダメみたいでした。 別の名前の ~/.local/share/virtualenvs/myproject2-v0_H80Xk が作られてしまいました。

仮想環境の削除

–rm Remove the virtualenv.

Usage

myproject2 の ~/.local/share/virtualenvs にある仮想環境を削除しておきます。 --rm のオプションで削除できるみたいです。

$ pipenv --rm
Removing virtualenv (/home/user/.local/share/virtualenvs/myproject2-v0_H80Xk)…

削除できたみたいです。

なんか、不用意に仮想環境に対する実際のディレクトリーを移動してしまうと、 ~/.local/share/virtualenvs の下にある仮想環境のディレクトリーがどこにも関連していない状態になりそうで気持ち悪い感じがします。 なんで実際のディレクトリーの下に pip のファイルとか保存しないのだろう?

myproject2 のディレクトリーの名前を myproject に戻しておきます。

$ cd ..
$ mv myproject2 myproject
$ cd myproject

パッケージのアンインストール

$ pipenv uninstallpipenv install の全てのパラメータに加えて、 --all--all-dev もサポートしています。

  • --all — このパラメータを付けると、仮想環境から全てのファイルを除去しますが、Pipfileだけは触らずに残します。
  • --all-dev — このパラメータを付けると、開発環境の全てのパッケージを仮想環境から除去し、Pipfileからも削除します。

$ pipenv uninstall

全てのパッケージをまとめて削除できるようです。

最初に Pipfile の中身を確認しておきます。

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
cowsay = "*"

[dev-packages]

[requires]
python_version = "3.6"

[packages] のところに cowsay があります。

仮想環境の中の site-packages も確認しておきます。

$ ls ~/.local/share/virtualenvs/myproject-O_i4omMD/lib/python3.6/site-packages/
__pycache__           easy_install.py       pkg_resources                wheel
cowsay                pip                   setuptools                   wheel-0.31.1.dist-info
cowsay-1.0.dist-info  pip-10.0.1.dist-info  setuptools-39.2.0.dist-info

cowsay があります。

$ pipenv uninstall --all-dev
Un-installing [dev-packages]…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (6800d4)!

アンインストールできました。

Pipfile の中身です。

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
cowsay = "*"

[dev-packages]

[requires]
python_version = "3.6"

うーん、まだ cowsay がありますね。

仮想環境の中の site-packages です。

$ ls ~/.local/share/virtualenvs/myproject-O_i4omMD/lib/python3.6/site-packages/
__pycache__           easy_install.py       pkg_resources                wheel
cowsay                pip                   setuptools                   wheel-0.31.1.dist-info
cowsay-1.0.dist-info  pip-10.0.1.dist-info  setuptools-39.2.0.dist-info

うーん、こちらもまだ cowsay がありますね。

個別にアンインストールしてみます。

$ pipenv uninstall cowsay
Un-installing cowsay…
Uninstalling cowsay-1.0:
  Successfully uninstalled cowsay-1.0

Removing cowsay from Pipfile…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (ca72e7)!

アンインストールできました。

Pipfile の中身です。

$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.6"

ちゃんと cowsay がなくなってました。

仮想環境の中の site-packages です。

$ ls ~/.local/share/virtualenvs/myproject-O_i4omMD/lib/python3.6/site-packages/
__pycache__      pip                   pkg_resources  setuptools-39.2.0.dist-info  wheel-0.31.1.dist-info
easy_install.py  pip-10.0.1.dist-info  setuptools     wheel

こちらもちゃんと cowsay がなくなってました。

--all--all-dev のオプションがうまく動いていないのかな? それともわたしの認識が誤っているのかな?

プロジェクトのホームのディレクトリー

–where Output project home information.

Usage

--where オプションでプロジェクトのパスが確認できるみたいです。

$ pipenv --where
/home/user/myproject

うーん、これはプロジェクトのホームで pipenv のコマンドを実行する必要があるわけだから pwd と変わらないわけですね? もっと違う使い方があるのかな?

仮想環境のディレクトリー

–venv Output virtualenv information.

Usage

--venv オプションで仮想環境のパスが確認できるみたいです。

$ pipenv --venv
/home/user/.local/share/virtualenvs/myproject-O_i4omMD

仮想環境のパスが出力されました。

終わり

Pipenv を使ってみて、 virtualenv よりもいい印象を受けました。 でも、ディレクトリーの名前を変えたり移動したときに、そのまま使い続けることができないのはやっぱり面倒だと思ってしまいます。