【问题标题】:Interpreters installed via pyenv are not added to $PATH通过 pyenv 安装的解释器不会添加到 $PATH
【发布时间】:2019-10-21 04:00:51
【问题描述】:

我不明白为什么pyenv(通过自制软件安装)似乎不起作用。

似乎我的 $PATH 变量没有被 pyenv 正确更新,因此找不到通过 pyenv 安装的解释器。例如,对于 python 版本 3.6.8:

$ pyenv versions
  system
* 3.4.10 (set by /Users/cglacet/.pyenv/version)
* 3.5.7 (set by /Users/cglacet/.pyenv/version)
* 3.6.8 (set by /Users/cglacet/.pyenv/version)
* 3.7.3 (set by /Users/cglacet/.pyenv/version)
* 3.8-dev (set by /Users/cglacet/.pyenv/version)

$ pyenv which python3.6
/Users/cglacet/.pyenv/versions/3.6.8/bin/python3.6

$ $(pyenv which python3.6) --version
Python 3.6.8

$ pyenv shell
pyenv: no shell-specific version configured

$ pyenv local
pyenv: no local version configured for this directory

到目前为止,一切看起来都很好,但是:

$ python3.6 --version
-bash: python3.6: command not found

$ python --version
Python 3.7.0

如果我检查我的PATH 环境变量,我看不到/Users/cglacet/.pyenv/versions/3.x.x/bin 形式的任何路径。

请注意,3.7.0 是我在安装 pyenv(系统版本)之前拥有的 python 版本。我期望有3.6 可用(通过pyenv 安装的所有版本),这应该是我将其激活为全局解释器的情况,如前所示。预期的行为是:

$ python3.6 --version
Python 3.6.8

【问题讨论】:

  • 预期的功能是什么?请添加。
  • 我在手机上很难做到这一点,但已经完成了。我只是希望在我的路径中可以使用可执行文件“python3.6”。
  • 运行which pyenvwhich python会得到什么?
  • 没有迹象表明您执行了pyenv init 或根据instructions 进行了其他设置。我们无法告诉您安装有什么问题,因为您没有提供 MCVE。 “一旦我对正在发生的事情有一个模糊的概念,我会立即更新标题。” SO 不是个人帮助网站。它是一个文档站点。这是您在发布之前需要完成的事情。
  • @cglacet 您不太可能在一个问题中捕获此错误的所有可能原因。主机系统的任何数量的更改或安装过程中发生的错误都可能导致它。 There is not enough information here for a person trying to answer the question to determine if their belief about the cause is correct.我的意思是,这不是一个好问题。

标签: python macos path homebrew pyenv


【解决方案1】:

经过一番挖掘,我发现 homebrew install 无法编辑我的.bash_profile。问题是pyenv 本身不依赖这些添加,因此该错误是无声的(您的路径中没有解释器)。

如果您在这种情况下,您必须运行部分安装 manually (starting at "#2 Configure your shell's environment for Pyenv"在您的 ~/.bash_profile 中添加以下内容(最好附加此新路径,以便它在您的系统之前到达python 路径,换句话说,将其附加到 bash 配置文件的末尾):

export PATH=$(pyenv root)/shims:$PATH

这解决了我遇到的问题(因为目录$(pyenv root)/shims 包含您通过pyenv 安装的所有解释器)。但是您可能希望拥有 pyenv 提供的完整功能集(例如,命令的自动完成),这(理论上)可以通过将以下内容添加到您的 .bash_profile 而不是 PATH 导出来完成:

eval "$(pyenv init -)"

但对我来说,这不起作用,因为 pyenv init 产生了一些错误代码(缺少 function 声明),另一方面,您可以使用以下内容,它应该可以工作(更好):

eval "$(pyenv init - | sed 's:^pyenv() :function pyenv():')"

我仍然不知道为什么我的系统上安装失败,如果有人作为有趣的线索(这可能值得修复,因为我可能不会是唯一遇到此问题的人)。

【讨论】:

  • 谢谢!同样的问题!我在 env 上的 python 版本指向机器中的本地 python,并且使用一行 我能够解决它。
  • 你也在 osx 上吗?
  • @cglacet 我在 OSX 10.15.4 和同样的问题上。谢谢
  • 谢谢,这帮助很大!对于鱼壳,将“set PATH (eval pyenv root)/shims $PATH”添加到 config.fish
  • 这并不能修复 .pyenv/versions/3.6.8/bin/ 中项目的路径。它只是为主要垫片修复它(pip python python3等)。我假设有一个类似的命令可以将路径返回到当前选择的版本,类似于 (pyenv root) 所以将 $(pyenv version?)/bin 或其他任何内容添加到路径中编辑:运行“pyenv rehash”修复了这个问题通过为versions/3.x/bin 文件夹中的所有内容创建垫片。当您通过 shim 安装软件包时,它应该会自动运行,但这似乎无法正常工作
猜你喜欢
  • 2023-03-30
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2018-11-06
  • 2018-12-24
  • 2018-10-10
相关资源
最近更新 更多