【问题标题】:pyenv - how to get more info re: "system", including versionpyenv - 如何获取更多信息:“系统”,包括版本
【发布时间】:2022-02-18 07:49:13
【问题描述】:

我在 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 正在使用时,我可以获得有关系统 python 的信息,但为什么 pyenv 不显示任何相关信息?显示有关当前配置的信息似乎是配置管理工具的基本功能。

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

所以我很沮丧pyenv 正在这样做。

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

【问题讨论】:

  • pyenv activate system ; python --version ?系统版本不由pyenv管理,所以是系统版本。
  • @Mephy 哦,就像 Homebrew 一样?该工具是系统顶部的一个层,因此本质上存在该工具无法管理甚至可能无法访问的部分。

标签: python pyenv


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2012-05-07
    • 2011-03-07
    • 2016-03-12
    • 2011-06-02
    • 2016-04-18
    相关资源
    最近更新 更多