Virtualenv 与 pyenv 给出错误的 python 版本

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

我在最新的 debian 测试发行版上安装了 pyenv,并且其中有 python 2.7.1。

我为这个版本的项目创建了一个 virtualenv,但是激活后它给了我 python 系统版本(3.7)。

这就是我所做的:

$ pyenv virtualenv 2.7.16 my_project-2.7
Requirement already satisfied: virtualenv in /home/user/.local/lib/python2.7/site-packages (15.1.0)
You are using pip version 18.1, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Using base prefix '/usr'
New python executable in /home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/bin/python
Installing setuptools, pip, wheel...
done.
Installing pip from https://bootstrap.pypa.io/get-pip.py...
Collecting pip
  Using cached https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 19.1.1
    Uninstalling pip-19.1.1:
      Successfully uninstalled pip-19.1.1
Successfully installed pip-19.1.1

$ pyenv activate my_project-2.7 
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

$ python --version
Python 3.7.3

$ pip --version
pip 19.1.1 from /home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/lib/python3.7/site-packages/pip (python 3.7)

这很奇怪。 virtualenv 已正确设置为 ~/.pyenv/version/2.7.16,但我可以看到 pip 来自 /home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/lib/python3.7 /

我想我错过了一些东西,或者我的python安装可能有些混乱,但我找不到这个python3.7 lib在这里做什么。

如何为 python2.7 创建这个 virtualenv ?

编辑

我尝试完全删除 pyenv (删除 $(pyenv root) 目录),然后使用 pyenv-installer 重新安装它,但它没有改变任何东西。

我为我拥有的两个项目创建了两个 virtualenv(上面的 2.7 和 3.5 中的一个)。

$ pyenv virtualenvs
  2.7.16/envs/my_project-2.7 (created from /usr)
  3.6.8/envs/other_project-3.6 (created from /home/user/.pyenv/versions/3.6.8)
  my_project-2.7 (created from /usr)
  other_project-3.6 (created from /home/user/.pyenv/versions/3.6.8)

我认为问题可以从这个 created from /usr 中找到,但我不明白它是什么意思。为什么这个 virtualenv 不是从 pyenv python 版本创建的?完全相关吗?

似乎当我创建3.+虚拟环境时,使用了venv。但在 2.7 上,使用 virtualenv 并失败。

python virtualenv pyenv
1个回答
0
投票

如果我根据链接的说明从头开始安装

pyenv
pyenv-virtualenv
,则WFM如所写。

我可以看到

pip
来自
/home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/lib/python3.7/

这表明该虚拟环境很可能已经存在,并且 Python 版本错误。

我只能猜测事情怎么会变成这样。最有可能的是,您手动弄乱了 virtualenv 或

pyenv
envvars;或者运行脚本/在你的 bash stratup 脚本中有一些东西可以做到这一点。例如。如果您使用
pyenv-virtualenv
命令来管理环境,则不应将它们与常规
virtualenv
命令混合使用。


使用

pyenv virtualenv-delete my_project-2.7
删除此 virtualenv,然后重新创建它应该会有所帮助。

如果没有,请删除

~/.pyenv
以及启动脚本中的所有相关内容,重新启动 shell 并重新安装
pyenv
pyenv-virtualenv

为了进行破坏性较小的修复,您需要仔细检查您的 shell 环境(环境变量、别名、定义的 shell 函数)和启动脚本,以查找可能与
pyenv
的工作发生冲突的任何内容;如果这没有帮助,请调试
pyenv
机械
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
在这里非常有帮助)以找出到底发生了什么。

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