【问题标题】:Python: How to fix "pyenv: bash: command not found"Python:如何修复“pyenv:bash:找不到命令”
【发布时间】:2019-09-09 16:47:27
【问题描述】:

我使用 pyenv 来管理我的 Python 环境,并且在简单地运行 bash 时得到以下结果。

$ bash
pyenv: bash: command not found

我试图解决为什么pipenv shell 因上述错误而失败,这就是我发现bash 无法正常工作的原因。我尝试通过brew 更新pipenv 并运行pyenv rehash 以重新生成垫片。 bash 肯定存在。

$ which bash
/bin/bash

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

$ someboguscommand
-bash: someboguscommand: command not found

这向我表明pyenv 在这种情况下甚至不会搜索匹配的命令,而是搜索PATH 中的后续路径,因此必须对bash 进行一些特殊处理。

【问题讨论】:

  • type bash 说什么?
  • 这表明问题出在您的 init 文件中的命令上,例如 .bashrc.bash_profile。您可以运行bash -x 来显示正在发生的事情的调试跟踪,以及它开始失败的位置。尽管出现错误,但单独运行 bash 可能仍然有效,并且仅在您的 .bashrc.bash_profile 中显示有关失败的 pyenv 命令的警告,否则会为您提供工作 shell。
  • 更好,我建议PS4=':$BASHPID:${BASH_SOURCE##*/}:$LINENO+' bash -x 在跟踪日志中记录每个命令的进程 ID、源文件和行号。将这些日志中的 BASHPID 与您的起始 shell 中的进行比较,您就可以确定错误是在进程内还是进程外。
  • 顺便说一句,冒着从建议转向倡导的风险,就个人而言,我更乐意使用Nix 来管理开发环境——它不仅可以让你控制哪些 Python 模块在——每个 shell 或项目的范围,以及其他可执行文件和库的版本;这意味着您可以在一个环境中使用 bash 5,在另一个环境中使用 bash 3.2;或者针对一个版本的 zlib 或 sqlite 构建的 Python,以及另一个版本的不同版本;等——同样,它支持管理 Ruby/Node/Haskell/等。编译器/解释器/库。
  • 我会先查看我的 .profile、.bashrc 和类似文件。 pyenv 的初始化代码在他们的文件中,并且似乎被破坏了。也许删除它并再次设置 pyenv?

标签: python bash pyenv


【解决方案1】:

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

我在运行pyenv install 3.8.2时遇到了以下错误:

pyenv: bash: command not found

我是这样解决的

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

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

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

sudo nano ~/.bashrc

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

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

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

exec "$SHELL"

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

资源Managing Multiple Python Versions With pyenv

就是这样。

我希望这会有所帮助

【讨论】:

    【解决方案2】:

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

    . virtualenvwrapper.sh
    

    这反过来又调用了 pyenv 的 virtualwrapper shim:

    $ which virtualenvwrapper.sh
    /Users/greg/.pyenv/shims/virtualenvwrapper.sh
    

    这就是导致失败的原因。我可以通过使用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
    

    感谢“那个家伙”、Charles Duffy 和 rje 提供的有用的 cmets!

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2023-03-19
      • 2021-11-17
      • 2019-03-26
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      相关资源
      最近更新 更多