首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么‘python’指向我系统的默认python解释器,而不是我的‘`pyenv`’python解释器?

为什么‘python’指向我系统的默认python解释器,而不是我的‘`pyenv`’python解释器?
EN

Stack Overflow用户
提问于 2022-03-05 06:01:00
回答 3查看 224关注 0票数 3

python指向系统的默认python解释器,而不是pyenv python解释器。

我创建了python虚拟环境并按如下方式激活了它:

代码语言:javascript
复制
pyenv virtualenv 3.8.12 test3
pyenv activate test3

然后,运行python将为我提供一个python3.7解释器(这是系统的默认python解释器),而不是3.8.12。为什么?

全部命令输出:

代码语言:javascript
复制
root@server:/home/code-base/f# pyenv virtualenv 3.8.12 test3
Looking in links: /tmp/tmp1yp95sav
Requirement already satisfied: setuptools in /root/.pyenv/versions/3.8.12/envs/test3/lib/python3.8/site-packages (56.0.0)
Requirement already satisfied: pip in /root/.pyenv/versions/3.8.12/envs/test3/lib/python3.8/site-packages (21.1.1)

root@server:/home/code-base/f# pyenv activate test3
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

(test3) root@server:/home/code-base/f# python
Python 3.7.11 (default, Jul 27 2021, 14:32:16)
[GCC 7.5.0] :: Anaconda, Inc. on linux

此外:

  • pyenv which python返回/root/.pyenv/versions/test3/bin/python
  • command -v python在虚拟环境中返回/opt/conda/bin/python
  • $PATH/root/.pyenv/plugins/pyenv-virtualenv/shims:/root/.pyenv/bin:/opt/conda/bin:/app/python/bin:/opt/conda/bin:/usr/local/mpi/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.local/bin
  • ls -la /root/.pyenv/plugins/pyenv-virtualenv/shims包含两个文件夹:activatedeactivate.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-05 06:26:15

考虑到您向我们提供的新信息,很可能您的eval "$(pyenv init --path)"~/.profile中丢失了(或者在您使用K8s时在Dockerfile中),因为/root/.pyenv/shim并不是$PATH的一部分。

旧答案:

这里有两种可能的解决办法:

如果您没有通过以下方法选择3.8.12二进制文件作为系统默认值:

代码语言:javascript
复制
$ pyenv global 3.8.12
$ python -V
Python 3.8.12

$ pyenv versions
  system
  2.7.15
* 3.8.12 (set by /home/realpython/.pyenv/version)

或者/opt/conda/bin/在您的$PATH中具有比您的pyenv安装更高的优先级。

票数 2
EN

Stack Overflow用户

发布于 2022-03-05 06:26:13

  1. If ~/.profile ~/.profile ~/.bashrc (Debian,Ubuntu,Mint):

代码语言:javascript
复制
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

重新启动登录会话,以使对配置文件的更改生效。例如,如果您在GUI会话中,则需要完全注销并重新登录。

  1. 安装您需要的python版本.

代码语言:javascript
复制
pyenv install 3.8.12

  1. 在应用程序目录

上激活它

代码语言:javascript
复制
pyenv local 3.8.12

然后

  1. 定位python版本

代码语言:javascript
复制
$ pyenv which python
/home/xirehat/.pyenv/versions/3.8.12/bin/python
票数 2
EN

Stack Overflow用户

发布于 2022-03-05 07:45:29

一旦创建了虚拟环境,就需要激活它。虚拟环境的bin目录中有一个shell脚本,您需要对其进行源。

例如,我的默认shell是zsh (在macOS上),在我的.zshrc中有以下行:

代码语言:javascript
复制
source "/Volumes/G-DRIVE Thunderbolt 3/PythonStuff/venv3.10.2/bin/activate"

因此,将在任何zsh实例中使用的python可执行文件将基于venv。

很明显,你通往复仇之路是不同的,但你明白了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71359897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档