首页 > 解决方案 > pyenv - 如何获取更多信息:“系统”,包括版本

问题描述

我在 MacOS 上,我通过 brew 安装了最新的 python。几个月前,我开始使用pyenv能够在最新的 python 和修复为 python v3.8 的项目之间切换。我想我已经设置好了,但我很困惑。pyenv拒绝向我显示以下信息system

$ pyenv versions
* system (set by /Users/<user>/.pyenv/version)
  3.8.6

$ pyenv version system
system (set by /Users/<user>/.pyenv/version)

$ cat ~/.pyenv/version
system

如何让 pyenv 向我显示 ? 的版本和/或位置system?显然,当它是正在使用的系统 python 时,我可以获得有关它的信息,但为什么不pyenv显示任何关于它的信息?显示有关当前配置的信息似乎是配置管理工具的基本功能。

相比之下,当我运行时apt list --installed,它会向我显示已安装的内容,无论是由我安装还是与操作系统捆绑在一起。它不只是显示系统安装的东西的占位符。

所以我很沮丧这样pyenv做。

编辑:哇,nvm是一样的。如何?为什么?为什么这些工具内置无视系统配置?

标签: pythonpyenv

解决方案


Pyenv 是一个shim 工具。它用于拦截对这些命令的调用pythonpip透明地提供正确的二进制文件。当您调用时python -m some_module,pyenv 将找到对该python调用有意义的正确二进制文件,因为它是由.python-version文件在本地设置的,或者是由当前 shell 使用pyenv shellorpyenv activate命令设置的。

Pyenv 尽量不要弄乱当前的 python 安装,因为环境系统可能会使用这些工具,并且应该继续使用它们已经使用的任何版本。因此,它只是将当前存在的二进制文件打包为“系统”而不触及它,以便安装 pyenv 之前的现有系统继续像以前一样工作。

作为最佳实践,我建议您创建一个新环境并将其设置为与pyenv global系统不同的东西(例如pyenv install 3.9.10 && pyenv virtualenv 3.9.10 myglobal && pyenv global myglobal)——这样您的默认应用程序 python 与操作系统 python 不同,因此您不能弄乱系统; 保持原样。如果你想检查什么系统,你可以激活它并正常调用它,pyenv activate system ; python --version会显示版本,但这不是你应该首先做的事情,所以pyenv不支持它。


推荐阅读