通过 pyenv 安装的解释器不会添加到 $PATH
Interpreters installed via pyenv are not added to $PATH
我不明白为什么 pyenv
(通过自制程序安装)似乎不起作用。
我的 $PATH
变量似乎没有被 pyenv 正确更新,因此可以找到 none 通过 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
经过一番挖掘,我发现自制软件安装无法编辑我的 .bash_profile
。问题是 pyenv
本身不依赖于这些添加,因此错误是无声的(你只是没有在你的路径中的解释器)。
如果您属于这种情况,则必须 运行 部分安装 manually (starting at "#2 Configure your shell's environment for Pyenv" 和 在您的 ~/.bash_profile
[=34= 中添加以下内容](最好附加这个新路径,以便它在您的系统 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():')"
我仍然不知道为什么在我的系统上安装失败,如果有人作为线索会很有趣(这可能值得修复,因为我可能不是唯一遇到此问题的人)。
pyenv 已经将路径解耦为单独的 init 命令。在您的点文件中,您需要一个额外的 pyenv init --path
:
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
如果您 运行 手动执行此命令(不对其进行评估),请检查它的作用:
$ pyenv init --path
export PATH="/Users/yourname/.pyenv/shims:${PATH}"
我不明白为什么 pyenv
(通过自制程序安装)似乎不起作用。
我的 $PATH
变量似乎没有被 pyenv 正确更新,因此可以找到 none 通过 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
经过一番挖掘,我发现自制软件安装无法编辑我的 .bash_profile
。问题是 pyenv
本身不依赖于这些添加,因此错误是无声的(你只是没有在你的路径中的解释器)。
如果您属于这种情况,则必须 运行 部分安装 manually (starting at "#2 Configure your shell's environment for Pyenv" 和 在您的 ~/.bash_profile
[=34= 中添加以下内容](最好附加这个新路径,以便它在您的系统 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():')"
我仍然不知道为什么在我的系统上安装失败,如果有人作为线索会很有趣(这可能值得修复,因为我可能不是唯一遇到此问题的人)。
pyenv 已经将路径解耦为单独的 init 命令。在您的点文件中,您需要一个额外的 pyenv init --path
:
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
如果您 运行 手动执行此命令(不对其进行评估),请检查它的作用:
$ pyenv init --path
export PATH="/Users/yourname/.pyenv/shims:${PATH}"