環境
- Ubuntu16.04.3
- VSCode: 1.24.1
- pipenv: version 2018.6.25
症状
-
Pipfile
が置いてあるディレクトリをVSCode
でOpenする。 - VSCodeで以下のメッセージが出る。
Workspace contains pipfile but attempt to run 'pipenv --venv' failed with 'spawn pipenv ENOENT'. Make sure pipenv is on the PATH.
実際にコードを実行してもPipfileで定義された環境が使われていない模様。
(installしたパッケージがimportできない)エラーメッセージには
pipenv --venv
failedと表示されるが、ターミナル上からは正常に実行できる。
$ pipenv --venv
/home/sabaku/Documents/try-keras/.venv
原因
結論: はっきりわからないが、pipenv
のインストールディレクトリが関係している模様。
まず、VSCodeのWebサイトによるとpipenvで構築した仮想環境も自動的に読み込まれるようだ。(補足: 検証していないが、この挙動をさせるにはexport PIPENV_VENV_IN_PROJECT=true
をしておく必要があるかもしれない。今回の環境ではもともとtrue
になっている。)
The extension automatically looks for interpreters in the following locations:
...
A pipenv environment for the workplace folder.
...
VSCodeのgithubに今回の症状に似たISSUEが上がっている。
もしかすると、この件が原因なのかもしれない。
https://github.com/Microsoft/vscode-python/issues/1338#issuecomment-390243643
対処
pipenvのインストール先を確認してみるとuserディレクトリ以下にインストールされている事が分かる。
$ pip show pipenv
...
Location: /home/sabaku/.local/lib/python3.5/site-packages
...
これをまずアンインストールする。
$ pip uninstall pipenv
Uninstalling pipenv-2018.6.25:
Would remove:
/home/sabaku/.local/bin/pewtwo
/home/sabaku/.local/bin/pipenv
/home/sabaku/.local/bin/pipenv-resolver
/home/sabaku/.local/lib/python3.5/site-packages/pipenv-2018.6.25.dist-info/*
/home/sabaku/.local/lib/python3.5/site-packages/pipenv/*
/home/sabaku/.local/lib/python3.5/site-packages/tasks/vendoring/*
/home/sabaku/.local/lib/python3.5/site-packages/tests/integration/*
/home/sabaku/.local/lib/python3.5/site-packages/tests/unit/*
Proceed (y/n)? y
Successfully uninstalled pipenv-2018.6.25
pipenvをrootに再インストール。
$ sudo pip install pipenv
とりあえずインストール先が変わった。
$ which pipenv
/usr/local/bin/pipenv
この状態でVSCodeを立ち上げたら症状が改善した。
さらに、VSCode
の下にあるPython環境の指定で、pipenvのvirtualenvを指定したところ、コードの実行時にもpipenvの環境を使ってくれるようになった。
正しい対処法なのか分からないが、とりあえず共有する。