LoginSignup
1
1

More than 5 years have passed since last update.

pipenv shell がエラー

Posted at

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]$

で解決。
しかし他に同じようにトラブってる人を見かけないのはなぜか...。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1