Mar*_*yan 10 windows ubuntu pyenv windows-subsystem-for-linux
去年我一直在 wsl2 下的 ubuntu 22.04 中使用 pyenv。它工作正常,并且我在安装 python 版本并将其设置为项目时没有任何问题。我现在有一个 Windows 应用程序项目,我想在 Windows 中处理(它是一个 GUI 应用程序)。我找到了 pyenv-win,当我安装它时,它破坏了我的 wsl2 安装。当它启动时,我收到以下错误:
-bash: /mnt/c/Users/mryan/.pyenv/pyenv-win/bin/pyenv: /bin/sh^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以 mryan 是我的 Windows 用户名。我的 ubuntu 用户名是 dev。
我也搞乱了我的 ubuntu 安装,所以提交这个问题后我要做的就是将我的 Windows 系统恢复到昨天开始这个过程之前。然后我将从头开始让 windows pyenv-win 运行。
还有其他人经历过这个吗?您知道让这一切顺利进行的正确方法吗?我应该从 ubuntu 中卸载 pyenv,在 Windows 中安装它,然后在 ubuntu 中重新安装吗?我感觉这是 Windows 和 ubuntu 重叠的路径问题?
问题
\n我遇到了同样的问题,在 Windows+WSL 设置中同时使用 pyenv-win 和 pyenv 可能会导致环境变量发生冲突。
\n\xe2\x80\x99s 因为 WSL 将 Windows PATH 附加到 Linux $PATH 变量。因此,每当您在 WSL 终端中键入pyenv时,系统都会查找 $PATH 变量,该变量引用 pyenv-win 而不是 pyenv。它尝试读取/mnt/c/Users/<username>/.pyenv/pyenv-win/bin/pyenv
,但只能\xe2\x80\x99t。即使你让操作系统用sed -i -e \'s/\\r$//\' /mnt/c/Users/<username>/.pyenv/pyenv-win/bin/pyenv
命令读取它,你也会遇到其他问题,因为 pyenv-win 是为 Windows 构建的。
解决方案
\n我们不需要卸载任何东西,只需确保 Windows 指向 pyenv-win 并且 WSL 指向 pyenv。确保两者都正确安装后,只需将 WSL $PATH 中 pyenv-win 可执行文件的 WSL 路径替换为 pyenv 可执行文件的路径即可。
\n在哪里执行此操作可能取决于您的系统。请阅读有关如何正确设置的文档。在 Ubuntu 中,默认 shell 可能是 bash,其启动配置位于~/.bashrc、~/.profile和/或~/.bash_profile中中。
\n简而言之,只需将以下内容添加到~/.bashrc、~/.profile和/或~/.bash_profile文件中:
\nexport PYENV_ROOT="$HOME/.pyenv"\nexport PATH="$PYENV_ROOT/bin:$PATH"\neval "$(pyenv init -)"\n
Run Code Online (Sandbox Code Playgroud)\n请注意,与文档相反,我们更改了command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
. \xe2\x80\x99s 因为在安装了 pyenv-win 的 WSL 中,第一个条件将返回 true,并且你的 PATH 将永远不会更新。
如果你不喜欢你的 $PATH 变量有多余的路径,而不是在 $PATH 的开头添加 $PYENV_ROOT ,你可以简单地用 $PATH 变量中的 pyenv 路径替换 pyenv-win 的路径sed命令。例如,您可以输入以下代码片段,而不是上面的脚本:
\nexport PYENV_ROOT="$HOME/.pyenv"\nBIN_OLD="/mnt/c/Users/<username>/.pyenv/pyenv-win/bin"\nBIN_NEW="$PYENV_ROOT/bin"\nSHIMS_OLD="/mnt/c/Users/<username>/.pyenv/pyenv-win/shims"\nSHIMS_NEW="$PYENV_ROOT/shims"\nexport PATH=`echo $PATH | sed "s@$BIN_OLD@$BIN_NEW@" | sed "s@$SHIMS_OLD@$SHIMS_NEW@"`\neval "$(pyenv init -)"\n
Run Code Online (Sandbox Code Playgroud)\n
您的问题来自于 Windowspyenv
安装干扰WSL2
Ubuntupyenv
安装,要解决此问题,请按照以下步骤操作:
pyenv
首先从 Windows 和 WSL2 Ubuntu 环境中卸载,然后在 WSL2 https://github.com/pyenv/pyenv#installation上安装它 (pyenv) ,然后pyenv-win
在 Windows 上安装,然后更新 Windows PATH 变量以删除对 pyenv-win 的引用。转到“环境变量”,然后在“系统变量”上,找到名为 的变量Path
。编辑它并删除任何相关条目,pyenv-win
然后创建一个名为的新 Windows 用户环境变量PYENV_WIN
并将其设置为C:\Users\mryan\.pyenv\pyenv-win
现在,当您需要在 Windows 命令提示符或 PowerShell 中使用 pyenv-win 时,请执行以下操作:set PATH=%PYENV_WIN%\bin;%PYENV_WIN%\shims;%PATH%
和对于PowerShell
:$env:Path = "$env:PYENV_WIN\bin;$env:PYENV_WIN\shims;$env:Path"
归档时间: |
|
查看次数: |
2616 次 |
最近记录: |