Python:如何修复“pyenv:bash:找不到命令”

Gre*_*reg 6 python bash pyenv

我用来pyenv管理我的 Python 环境,只需运行bash.

$ bash
pyenv: bash: command not found
Run Code Online (Sandbox Code Playgroud)

我试图解决为什么pipenv shell会出现上述错误,这就是我发现甚至bash无法工作的原因。我尝试pipenv通过更新brew并运行pyenv rehash来重新生成垫片。并且bash绝对存在。

$ which bash
/bin/bash
Run Code Online (Sandbox Code Playgroud)

我预计如果pyenv找不到命令,PATH将搜索环境变量指定的后续路径。有趣的是,如果我执行一些不存在的命令,我不会收到错误pyenv

$ someboguscommand
-bash: someboguscommand: command not found
Run Code Online (Sandbox Code Playgroud)

这对我来说意味着pyenv在这种情况下甚至不搜索匹配的命令,并且PATH搜索后续路径,因此必须对bash.

Pro*_*ton 9

我在使用PyenvCentOS上设置Python 3.8时遇到了这个问题。

当我运行时遇到以下错误pyenv install 3.8.2

pyenv: bash: command not found
Run Code Online (Sandbox Code Playgroud)

我是这样解决的

问题是 pyenv 没有添加到我的配置文件的加载路径中。

我所要做的就是执行以下操作:

打开.bashrc我的用户主目录中的文件:

sudo nano ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

接下来,在文件底部添加以下内容并保存:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Run Code Online (Sandbox Code Playgroud)

最后,重新启动终端或运行以下命令将新添加的路径加载到当前 shell/终端会话中:

exec "$SHELL"
Run Code Online (Sandbox Code Playgroud)

现在,当您运行该命令时,pyenv install 3.8.2它应该可以正常工作。

资源使用 pyenv 管理多个 Python 版本

就这样。

我希望这有帮助


Gre*_*reg 1

问题是我的 中有以下行.bashrc,它在运行时被调用bash。这是我不再需要的一行:

. virtualenvwrapper.sh
Run Code Online (Sandbox Code Playgroud)

这又调用了 pyenv 的 virtualwrapper shim:

$ which virtualenvwrapper.sh
/Users/greg/.pyenv/shims/virtualenvwrapper.sh
Run Code Online (Sandbox Code Playgroud)

这就是导致失败的原因。我能够通过运行调试跟踪来识别这一点bash

$ bash -x
+ . virtualenvwrapper.sh
++ set -e
++ '[' -n '' ']'
++ program=bash
++ [[ bash = \p\y\t\h\o\n* ]]
++ export PYENV_ROOT=/Users/greg/.pyenv
++ PYENV_ROOT=/Users/greg/.pyenv
++ exec /usr/local/Cellar/pyenv/1.2.13_1/libexec/pyenv exec bash
pyenv: bash: command not found
Run Code Online (Sandbox Code Playgroud)

感谢“另一个人”、Charles Duffy 和 rje 的有用评论!