带有pyenv的Virtualenv提供了错误的python版本

时间:2019-06-05 14:26:11

标签: python virtualenv pyenv

我在最新的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根目录)目录,然后使用pyenv-installer重新安装它,但是它没有任何改变。

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

$ pyenv virtualenvs   2.7.16 / envs / my_project-2.7(从/ usr创建)   3.6.8 / envs / other_project-3.6(从/home/user/.pyenv/versions/3.6.8创建)   my_project-2.7(从/ usr创建)   other_project-3.6(从/home/user/.pyenv/versions/3.6.8创建)

我认为可以从/ usr 创建的中找到问题,但是我不明白这是什么意思。为什么未从pyenv python版本创建此virtualenv?真的有关系吗?

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

1 个答案:

答案 0 :(得分:0)

如果我根据链接的说明从头开始安装pyenvpyenv-virtualenv,则为WFM。

  

我可以看到pip来自/home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/lib/python3.7/

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

我只能猜出它最终是如何变成这样的。最有可能的是,您正在手动弄混virtualenv或pyenv envvar。或运行脚本/在bash stratup脚本中执行某些操作。例如。如果您使用pyenv-virtualenv命令来管理环境,则不应将它们与常规virtualenv命令混合使用。


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

否则,请从启动脚本中删除~/.pyenv和所有相关内容,重新启动Shell并重新安装pyenvpyenv-virtualenv
为了减少破坏性的修复,您需要仔细检查您的shell环境(envvar,别名,已定义的shell函数)和启动脚本,以查找可能与pyenv的工作冲突的所有内容;如果那没有帮助,请debug pyenv machineryexport PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'在这里有很大帮助)找出正在发生的事情。