pipenvを使おうと思ったら pipenv shell
でエラーが。
[obilixilido@srv:/work/obilixilido/w]$ python --version
Python 3.6.4
[obilixilido@srv:/work/obilixilido/w]$ pipenv --version
pipenv, version 2018.7.1
[obilixilido@srv:/work/obilixilido/w]$ pipenv install --python 3.6.4
Creating a virtualenv for this project...
Pipfile: /work/obilixilido/w/Pipfile
Using /home/obilixilido/.pyenv/versions/3.6.4/bin/python3.6m (3.6.4) to create virtualenv...
?Running virtualenv with interpreter /home/obilixilido/.pyenv/versions/3.6.4/bin/python3.6m
Using base prefix '/home/obilixilido/.pyenv/versions/3.6.4'
New python executable in /home/obilixilido/.local/share/virtualenvs/w-ZuYzNmXn/bin/python3.6m
Also creating executable in /home/obilixilido/.local/share/virtualenvs/w-ZuYzNmXn/bin/python
Installing setuptools, pip, wheel...done.
Setting project for w-ZuYzNmXn to /work/obilixilido/w
Virtualenv location: /home/obilixilido/.local/share/virtualenvs/w-ZuYzNmXn
Creating a Pipfile for this project...
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (ca72e7)! Installing dependencies from Pipfile.lock (ca72e7)...
? ???????????????????????????????? 0/0 ? 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
[obilixilido@srv:/work/obilixilido/w]$ pipenv shell
Launching subshell in virtual environment…
Traceback (most recent call last):
File "/home/obilixilido/.pyenv/versions/3.6.4/bin/pipenv", line 11, in <module>
sys.exit(cli())
File "/work/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/work/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/work/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/work/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/work/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/home/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/cli.py", line 664, in shell
three=three, python=python, fancy=fancy, shell_args=shell_args, pypi_mirror=pypi_mirror
File "/home/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/core.py", line 2163, in do_shell
shell.fork_compat(*fork_args)
File "/home/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/shells.py", line 107, in fork_compat
self.cmd, ['-i'], dimensions=(dims.lines, dims.columns),
File "/home/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/vendor/pexpect/pty_spawn.py", line 204, in __init__
self._spawn(command, args, preexec_fn, dimensions)
File "/home/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/vendor/pexpect/pty_spawn.py", line 276, in _spawn
'executable: %s.' % self.command)
pipenv.vendor.pexpect.exceptions.ExceptionPexpect: The command was not found or was not executable: -/bin/bash.
shellが見つからないと言っているらしい。
ソースをたどってみると
/work/obilixilido/.pyenv/versions/3.6.4/lib/python3.6/site-packages/pipenv/vendor/shellingham/posix/__init__.py
1 import os
2 import platform
3
4 from .._consts import SHELL_NAMES
5
6
7 def _get_process_mapping():
8 system = platform.system()
9 if system == 'Linux':
10 from . import linux as impl
11 else:
12 from . import _default as impl
13 return impl.get_process_mapping()
14
15
16 def get_shell(pid=None, max_depth=6):
17 """Get the shell that the supplied pid or os.getpid() is running in.
18 """
19 pid = str(pid or os.getpid())
20 mapping = _get_process_mapping()
21 login_shell = os.environ.get('SHELL', '')
22 for _ in range(max_depth):
23 try:
24 proc = mapping[pid]
25 except KeyError:
26 break
27 name = os.path.basename(proc.args[0]).lower()
28 if name in SHELL_NAMES:
29 return (name, proc.args[0])
30 elif proc.args[0].startswith('-'):
31 # This is the login shell. Use the SHELL environ if possible
32 # because it provides better information.
33 if login_shell:
34 name = login_shell.lower()
35 else:
36 name = proc.args[0][1:].lower()
37 return (os.path.basename(name), name)
38 pid = proc.ppid # Go up one level.
39 return None
proc.args[0]
が -/bin/bash
となっているのだけど28行目でそのまま抜けてしまってそれが使われてしまっているみたい。
もとのリポジトリをたどると下のcommitで修正されていた。
pipenvのリポジトリも更新が入っていたのでそのうち直るだろう。
とりあえずは、PIPENV_SHELLという環境変数を指定するとそれが使われるようなので、
[obilixilido@srv:/work/obilixilido/w]$ export PIPENV_SHELL=/bin/bash
[obilixilido@srv:/work/obilixilido/w]$ pipenv shell
Launching subshell in virtual environment…
. /home/obilixilido/.local/share/virtualenvs/w-ZuYzNmXn/bin/activate
[obilixilido@srv w]$ . /home/obilixilido/.local/share/virtualenvs/w-ZuYzNmXn/bin/activate
(w-ZuYzNmXn) [obilixilido@srv w]$
で解決。
しかし他に同じようにトラブってる人を見かけないのはなぜか...。