When install it by pip(pip install pipenv
), on zsh shell can't find the command pipenv
.
If install it by brew
: brew install pipenv
, then run pipenv shell
, got error
Loading .env environment variables...
Launching subshell in virtual environment...
Traceback (most recent call last):
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/bin/pipenv", line 8, in <module>
sys.exit(cli())
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/decorators.py", line 73, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/cli/command.py", line 429, in shell
do_shell(
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/core.py", line 2387, in do_shell
shell.fork_compat(*fork_args)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/shells.py", line 106, in fork_compat
c = pexpect.spawn(self.cmd, ["-i"], dimensions=(dims.lines, dims.columns))
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/pexpect/pty_spawn.py", line 205, in __init__
self._spawn(command, args, preexec_fn, dimensions)
File "/usr/local/Cellar/pipenv/2020.11.15/libexec/lib/python3.9/site-packages/pipenv/vendor/pexpect/pty_spawn.py", line 276, in _spawn
raise ExceptionPexpect('The command was not found or was not ' +
pipenv.vendor.pexpect.exceptions.ExceptionPexpect: The command was not found or was not executable: /use/bin/zsh.
There isn't a path naming /use/bin/zsh
. Why it's unstable?
The shell path is
echo $SHELL
/bin/zsh
You're asking two questions, really. I'll answer each in a separate section:
Loading .env environment variables... ... The command was not found or was not executable: /use/bin/zsh.
Looks like in your .env
file, you have PIPENV_SHELL=/use/bin/zsh
. That's incorrect. Instead,
it should be
PIPENV_SHELL=/bin/zsh
or simply
PIPENV_SHELL=zsh
or you can just remove it. Then pipenv shell
will automatically use the same shell as from which you invoked it.
pipenv
on macOSThe right way to install pipenv
on macOS is convoluted, but it's the only way to avoid running into trouble whenever you upgrade Python:
Undo what you've done so far:
% pip uninstall pipenv
% brew uninstall pipenv
Add to your .zshrc
file:
eval "$(brew shellenv)"
# Set your preferred python version.
# If you just want the latest release, you don't need to
# specify anything more than the major version number.
export PYENV_VERSION=3
# Tell pyenv where to keep your python installations.
export PYENV_ROOT=~/.pyenv
# Tell pipx where to install executables.
# pipx is like brew, but for python.
export PIPX_BIN_DIR=~/.local/bin
# -U eliminates duplicates.
export -U PATH path
path=(
$PIPX_BIN_DIR
$PYENV_ROOT/{bin,shims}
$path
)
# Installs/updates pipenv and all of its dependencies.
pybake() {
# If any commands fail, exit the function.
setopt LOCAL_OPTIONS ERR_RETURN
install-or-upgrade() {
if command -v $1 &>/dev/null; then
print -n "upgrade $1"
else
print -n "install $1"
fi
}
# Store the command to unfunction in a trap
trap "unfunction install-or-upgrade" EXIT
brew $(install-or-upgrade pyenv)
pyenv install --skip-existing $PYENV_VERSION
pip install --upgrade pip
# --user installs to ~/.local/bin
pip install --upgrade --user pipx
pipx $(install-or-upgrade pipenv)
}
Run:
% exec zsh # Restart your shell.
% pybake
Add to your .zshrc
file:
eval "$( pyenv init - )"
eval "$( pip completion --zsh )"
eval "$( register-python-argcomplete pipx )"
Run exec zsh
again or open a new terminal tab.
pipenv
After following the steps above, to update pipenv
, all you need to do is run:
```shell
% pybake && exec zsh
```