pyenv在macos上给出shopt命令未找到的错误信息。

问题描述 投票:2回答:1

我一直在使用 pyenv 最近,我在Mac上重新安装了Python的版本和虚拟环境。pyenv 自此以后,每 pyenv 我尝试运行命令,得到以下错误信息

/usr/local/bin/pyenv:94: command not found: shopt

我的默认shell是最新的 MacOS的默认shell,即 zsh. 在寻找修复方法的时候,我发现它与下列问题有关 bash 干扰 zsh. 我的默认shell是 zsh 的内容,在设置中的 ~/.bash_profile, /etc/profile & /etc/bashrc 都被注释掉了,但我还是有问题。我的操作系统Verion是: 10.15.4. 我试着重新安装了 pyenv 以及,但我得到同样的错误。我无法运行任何 pyenv 相关命令。

编辑1

我已经有了这几句话 .zshrc 但正如你所看到的,即使是这样运行一个命令 pyenv root 这给我带来同样的 shopt 错误。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$(pyenv root)/shims:$(pyenv root)/completions/pyenv.zsh:$PATH"

编辑2

运转 env 并在您的问题中添加输出

TMPDIR=/var/folders/gm/t0h6v8jx4bqd6cj73_k27myw0000gp/T/
XPC_FLAGS=0x0
TERM_PROGRAM_VERSION=433
TERM_PROGRAM=Apple_Terminal
XPC_SERVICE_NAME=0
TERM_SESSION_ID=55A65E3A-9B71-4C8A-81B8-0170EEAE3DCE
TERM=xterm-256color
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.j6zkqCw6Of/Listeners
SHELL=/bin/zsh
HOME=/Users/abc
LOGNAME=abc
USER=abc
PATH=/usr/local/opt/[email protected]/bin:/Users/saadali/Library/Python/3.7/bin:/usr/local/Cellar/[email protected]/9.6.16/bin/:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/abc/bin:/usr/local/opt/rabbitmq/sbin
SHLVL=1
PYTHONPATH=
LANGUAGE=en_US.UTF-8
port=
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
CPPFLAGS=-I/usr/local/opt/[email protected]/include
LDFLAGS=-L/usr/local/opt/[email protected]/lib
CFLAGS=-I/usr/local/opt/[email protected]/include
LANG=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
_=/usr/bin/env

编辑3

请阅读 这个 先聊天再推荐尝试什么,因为我可能已经尝试过了。聊天开始于 Apr 29 02:01 UTC +5 然后移动到一个线程。

编辑4

设置后 PYENV_DEBUG=1,这里的输出

(vmds) saadali@A006-00276 ~ :~$ pyenv
+ [:22] enable -f /../libexec/pyenv-realpath.dylib realpath
+ [:29] [ -z '' ']'
+ [:31] READLINK=+ [:31] type -p greadlink readlink
+ [:31] READLINK=+ [:31] head -1
+ [:31] READLINK='greadlink not found' 
+ [:32] [ -n 'greadlink not found' ']'
+ [:57] [ -z '' ']'
+ [:58] PYENV_ROOT=/Users/abc/.pyenv 
+ [:62] export PYENV_ROOT
+ [:65] [ -z '' ']'
+ [:66] [ -n '' ']'
+ [:82] [ -z '' ']'
+ [:83] PYENV_DIR=/Users/abc 
+ [:86] [ ! -d /Users/abc ']'
+ [:86] [ ! -e /Users/abc ']'
+ [:90] PYENV_DIR=+ [:90] cd /Users/abc
+ [:90] echo /Users/abc
+ [:90] PYENV_DIR=/Users/abc 
+ [:91] export PYENV_DIR
+ [:94] shopt -s nullglob
/usr/local/bin/pyenv:94: command not found: shopt
python macos zsh zshrc pyenv
1个回答
1
投票

根据你的信息和评论,你的问题似乎有3个原因同时存在。

  1. pyenv 是一个 巴什 (和 巴什-仅限)的脚本,并带有一个shebang行。#!/usr/bin/env bash
  2. /usr/local/bin 在...之前 /usr/bin/bin 中的可执行文件,所以其中的可执行文件会首先被你的PATH中的 /usr/bin/env (理想的行为,特别是在使用 自酿)
  3. /usr/local/bin/bash 是符号链接到 /bin/zsh!?!

所以到最后你要跑 阮夫zsh虽说它是一个近似的替代品,但也是一个很好的选择。巴什不知道 铺子 因此会被扼杀。我不知道为什么会有这个符号链接,但它不应该,因为 zsh不是一个完全兼容的bash的即插即用的替代品.

我建议

  1. (如果你用的是自制的) 检查你是否有 bash 装入 自酿 (后来不知为何被一个指向 zsh):

    # shows only top-level packages (directly installed)
    brew leaves        
    
    # shows *all* packages with dependency tree
    brew deps --tree --installed
    

    然后卸载 巴什 如果不再需要 然后去除 /usr/local/bin/bash).

  2. 要么删除,要么至少重命名这个罪魁祸首。

    mv /usr/local/bin/bash /usr/local/bin/bash_link_to_zsh

    或者,如果有些程序需要 /usr/local/bin/bash 要到位,只要让它指向 /bin/bash.

© www.soinside.com 2019 - 2024. All rights reserved.