pyenv:python命令未找到。

48

我想使用pyenv来使用Python3。

$ pyenv root
/Users/asari/.pyenv
$ pyenv versions
  system
  2.7.15
  3.6.2
  3.6.3
  3.6.4
* 3.6.6 (set by /Users/asari/workspace/hoge/.python-version)
$ python -V
pyenv: python: command not found

The `python' command exists in these Python versions:
  2.7.15

但是,无法找到Python命令。

我在.pyenv/shims/python中读到它,认为在.pyenv/versions/3.6.6/bin/中没有Python,但是不知道为什么会丢失Python。

$ pwd
/Users/asari/.pyenv/versions/3.6.6/bin
$ ls -la
total 12096
drwxr-xr-x  19 asari  staff      608  8 16 00:51 .
drwxr-xr-x   6 asari  staff      192  8 16 00:51 ..
lrwxr-xr-x   1 asari  staff        8  8 16 00:51 2to3 -> 2to3-3.6
-rwxr-xr-x   1 asari  staff      135  8 16 00:51 2to3-3.6
-rwxr-xr-x   1 asari  staff      276  8 16 00:51 easy_install-3.6
lrwxr-xr-x   1 asari  staff        7  8 16 00:51 idle3 -> idle3.6
-rwxr-xr-x   1 asari  staff      133  8 16 00:51 idle3.6
-rwxr-xr-x   1 asari  staff      258  8 16 00:51 pip3
-rwxr-xr-x   1 asari  staff      258  8 16 00:51 pip3.6
lrwxr-xr-x   1 asari  staff        8  8 16 00:51 pydoc3 -> pydoc3.6
-rwxr-xr-x   1 asari  staff      118  8 16 00:51 pydoc3.6
lrwxr-xr-x   1 asari  staff        9  8 16 00:51 python3 -> python3.6
lrwxr-xr-x   1 asari  staff       16  8 16 00:51 python3-config -> python3.6-config
-rwxr-xr-x   2 asari  staff  3078944  8 16 00:51 python3.6
lrwxr-xr-x   1 asari  staff       17  8 16 00:51 python3.6-config -> python3.6m-config
-rwxr-xr-x   2 asari  staff  3078944  8 16 00:51 python3.6m
-rwxr-xr-x   1 asari  staff     2076  8 16 00:51 python3.6m-config
lrwxr-xr-x   1 asari  staff       10  8 16 00:51 pyvenv -> pyvenv-3.6
-rwxr-xr-x   1 asari  staff      475  8 16 00:51 pyvenv-3.6

$PATH


(说明:$PATH是一个环境变量,用于指定系统在哪些目录中搜索可执行文件。)
$ echo $PATH | perl -p -e 's/:/\n/g'
/Users/asari/.pyenv/shims
/Users/asari/.pyenv/bin
/Users/asari/.rbenv/shims
/Users/asari/.cargo/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

安装日志

$ pyenv install 3.6.6
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.6.6.tar.xz...
-> https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz
Installing Python-3.6.6...
python-build: use readline from homebrew
Installed Python-3.6.6 to /Users/asari/.pyenv/versions/3.6.6
$ pyenv --version
pyenv 1.2.7
$ brew list | grep py
python
python@2

我从 GitHub 上克隆并安装了 pyenv(没有使用 brew 安装)。

.zshrc

# python
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
感谢您的时间。
更新
我创建了Python的符号链接,然后Python可以工作了。
为什么没有Python的符号链接? (我在想是否安装失败了,我运行了多次安装和卸载)
创建符号链接。
$ pwd
/Users/asari/.pyenv/versions/3.6.6/bin
$ ln -s python3 python
工作,
$ pwd
/Users/asari/workspace/hoge
$ python -V
Python 3.6.6

你是在哪里输入这些命令的?你已将 >>> 设为你的 zsh 提示符了吗? - user2357112
/Users/asari/.pyenv/bin 包含什么? - Baptiste Mille-Mathias
因为它是由README编写的。https://github.com/pyenv/pyenv - asari-mtr
应该使用.zshenv文件,而不是.zshrc。Zsh提示:修改您的~/.zshenv文件,而不是~/.bash_profile。请参考链接 - XoXo
将shell提示符更改为$。感谢您的评论。 - asari-mtr
显示剩余2条评论
13个回答

36

添加到~/.bashrc

alias python="$(pyenv which python)"
alias pip="$(pyenv which pip)"

可以运行,但如果您激活了不同的pyenv,则似乎需要再次运行此命令? - Juan A. Navarro
12
使用这些别名可能会导致意想不到的问题。例如,当您运行“pipenv shell”时,它将防止虚拟环境被错误激活。相反,只需确保在您的“.bash_profile”或“.zprofile”中执行“eval "$(pyenv init --path)"”,以便将“python”和“pip”的shims添加到您的路径中即可。 - abulka
2
这确实是个问题。@arno_v的回答 - 基本上是阅读文档 - 应该被接受并获得最高票数! - stephendwolff

22
在 macOS 10.15 下,我们将以下内容添加到 .bashrc 文件或 .zshrc 文件中。
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/shims:$PATH"

if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

16
对我来说,需要更新.zshrc.local文件中的配置。使用配置Shell环境的Pyenv页面上的信息,我将pyenv的初始化内容更改为以下内容:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

eval "$(pyenv init --path)"
eval "$(pyenv init -)"

# Optionally (when you use pyenv virtualenv)
eval "$(pyenv virtualenv-init -)"

你是否好奇为什么在zsh配置文件中会source ~/.bashrc bash配置文件?你是否使用.zshrc.local作为两个shell的通用配置?这似乎非常特定于你的设置,并且可能会在其他人的系统上引起问题,例如如果他们的系统中有一个~/.bashrc文件中的bash特定语法。virtualenv-init部分也涉及到其他人可能不使用的插件。 - Davos
1
非常好的问题。看起来我的系统甚至没有使用源.bashrc(我从pyenv文档中复制粘贴了它,但我看到他们在此期间也进行了更新)。我会稍微更新一下答案 :) - arno_v
@asari-mtr,你应该将这个标记为正确答案。我之前的评论已经不适用了。 - Davos

8
在MAC OS上,我通过在~/.bash_profile中添加以下两行解决了它。
在终端使用vi ~/.bash_profile命令。
插入以下2行。
alias python="$(pyenv which python)"
alias pip="$(pyenv which pip)"

在保存上述文件后运行以下命令:source ~/.bash_profile


这是由 @4lk4tr43 四个月前发布的错误答案的副本,只是使用了不同的配置文件。正如评论中所述,它并不是一个好的解决方案。问题在于您的路径中没有 shims 目录,例如:export PATH="$PYENV_ROOT/shims:$PATH"。证明:设置全局 pyenv pyenv global 3.11,然后设置此别名 alias python="$(pyenv which python)",现在检查 python 指向的位置 which python,现在更改全局版本 pyenv global 3.9 并检查您的别名 which python。注意它仍然是 3.11?这些别名只会导致混淆。 - Davos

5

如果您已经有 eval "$(pyenv init -)",那么将以下两行添加到./zshrc文件中即可:

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/shims:$PATH"

诀窍在于让垫片发挥其应有的作用。

1
这可能是关于Python环境管理的最有用的答案。 - Kambiz
1
曾在M1工作。谢谢。 - zeeshan mughal

5
在MacOS Montery 12.5中,/usr/local/bin/里不再有python二进制文件。一个快速的解决方法是确保有一个默认引用指向系统的python3
ln -s python3 /usr/local/bin/python

3

我遇到了同样的错误。我只需要按照pyenv的错误信息进行操作:

Note: See 'pyenv help global' for tips on allowing both...

这让我运行了以下命令:

pyenv global 2.7.18 3.10.6

这些是我 pyenv versions 命令中存在的版本。


3
在我的情况下,垫片已正确初始化:
$ which python
/home/me/.pyenv/shims/python

然而,类似于richard-domingo的答案,我看到的是:

$ pyenv which python
pyenv: python: command not found

The `python' command exists in these Python versions:
  3.8.13

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.

这里的问题是,活动的Python版本是system,而我的系统中的python3没有python别名(符号链接)。

解决这个问题有两个选项:

  • either create a python symlink for the system's python3, similar to cmcginty's answer, for example:

    ln -s python3 /usr/bin/python
    
  • or explicitly set the python version to one of the versions listed in the error message, using e.g. pyenv shell, pyenv local, or pyenv global, depending on your use-case. This is explained in the documentation and discussed here and here.

    In this case

    pyenv local 3.8.13
    

    whould create/modify a .python-version file in the current directory.

阅读文档中以下部分真的非常值得: 理解Python版本选择


3
当我使用pyenv时,用Python出现了以下提示信息:
/Users/zhezhezhu/.pyenv/shims/python: line 21: /usr/local/Cellar/pyenv/1.2.18/libexec/pyenv: No such file or directory

我通过执行 pyenv rehash 命令解决了这个问题。

2
我正在使用Ubuntu 20.04,似乎我错误地设置了我的~/.bashrc命令。我遵循了配置Pyenv的shell环境的步骤:

如果你的~/.profile引用了~/.bashrc(Debian,Ubuntu,Mint):

# the sed invocation inserts the lines at the start of the file
# after any initial comment lines
sed -Ei -e '/^([^#]|$)/ {a \
export PYENV_ROOT="$HOME/.pyenv"
a \
export PATH="$PYENV_ROOT/bin:$PATH"
a \
' -e ':a' -e '$!{n;ba};}' ~/.profile
echo 'eval "$(pyenv init --path)"' >>~/.profile

echo 'eval "$(pyenv init -)"' >> ~/.bashrc

如果您使用的是MacOsFedoraCentOS,请按照上面的链接进行操作。命令可能会随着pyenv/os/distributions的更新而改变,敬请留意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接