未能找到python_spec的Builtin发现的解释器



目标:

我正在尝试创建一个新的虚拟环境,并使用特定的python版本。

问题

当我键入:

python3 -m virtualenv --python="D:Python_Versionspython.exe" new_virtualenv

我得到:

运行时错误:未能找到python_spec='D:\python_Versions\python.exe'的Builtin发现的解释器

我所做的:

  1. 安装Ubuntu Bash for Windows

打开Windows命令提示符

wsl --install

来源:https://learn.microsoft.com/en-us/windows/wsl/install

  1. 安装管道

打开Windows命令提示符:

bash

然后

sudo apt-get install python-pip
  1. 安装Virtualenv

类型

pip install virtualenv
  1. 下载python版本(此处为3.6)

转到:https://www.python.org/downloads/release/python-360/

下载:Windows x86-64可执行安装程序

安装到您选择的文件夹中,即D:Python_Versions

  1. 尝试使用特定的python版本创建虚拟环境(失败)

在命令提示符中,转到项目文件夹("cd…")并键入:

python3 -m virtualenv --python="D:Python_Versionspython.exe" new_virtualenv

来源:使用不同的Python版本与virtualenv

通常,问题不在于尝试指定不同的Python版本,而在于尝试将Python可执行文件用于不同的操作系统。在WSL中,您基本上是在运行Linux二进制文件和库,但您试图让Linux Python使用Windows Python可执行文件创建一个虚拟环境。

这是一个坏主意的原因有很多,你得到的错误证明了其中一个:

  • Linux Python解释器不理解Windows路径,反之亦然

换句话说,Linux Python解释器python3无法解析路径D:Python_Versionspython.exe

WSL提供了一个很好的";翻译";可以在Linux路径和Windows路径之间转换的实用程序wslpath。例如:

  • /mnt/d/Python_Versions/python.exe&lt->D:Python_Versionspython.exe
  • /home/user/username/src/python_project&lt-&gt;\wsl$<distroname>homeuserusernamesrcpython_project

然而,这对解决这个特定问题没有帮助。你需要Linux Python来转换所有路径,这是不可能的

此外,虽然WSL可以运行Windows可执行文件(如python.exe),但这些可执行文件将无法访问Linux库和进程。

另一个不起作用的原因是,Windows Python无法在允许Windows进程访问WSL/Linux文件的伪网络共享驱动器上运行。例如,如果您在PowerShell中:

cd $env:USERPROFILEDocuments
mkdir srcpython
cd srcpython
python -m venv new_virtualenv
# Works

但是(也来自PowerShell):

cd \$wsl<distroname>home<username>
mkdir srcpython
cd srcpython
python -m venv new_virtualenv
# Error: [WinError 1] Incorrect function

假设WindowsPython在您的Windows路径中,则可以,另一方面,在WSL:中

cd /mnt/c/Users/<username>/Documents
mkdir src/python
cd src/python
python.exe -m venv new_virtualenv

但是,您不能激活虚拟环境,因为WindowsPython不会为Linux创建激活脚本。它确实创建了一个Bash脚本,但它是为Git-Bash创建的,如果你检查它(venv目录中的./Scripts/activate),你会发现它仍然使用Windows路径。

真的没有办法:

  • 在Linux中进行开发时,请使用Linux Python二进制文件和模块
  • 在Windows中进行开发时,请使用Windows Python二进制文件和模块

相反:

  • 在Windows环境中时,请使用Windows Python二进制文件和模块
  • 在Linux/WSL环境中时,请使用Linux Python二进制文件和模块

旁注:正如您现在可能意识到的,virtualenv--python标志旨在允许您指定与操作系统体系结构匹配的不同Python版本。换言之,如果你在Ubuntu/WSL上(我不相信你是,以pip为例):

sudo apt install python2
sudo apt install python3-pip
pip install virtualenv
python -m virtualenv --python=/usr/bin/python2 new_virtualenv
cd new_virtualenv
source bin/activate
python --version
# Will return Python 2.7.18

更新,解决您的其他评论:

对于如何在使用不同Python版本的不同环境的Windows上干净地安装Python(最好是所有环境都访问一个Spyder安装),同时不恢复到类似conda或类似的东西,你有什么建议吗?

由于Spyder本身就是一个Python应用程序,它在通信方面也会遇到同样的问题"跨平台";Pythonvirtualenv所做的。您可以尝试将Windows Python可执行文件设置为WSL Spyder终端,但它实际上无法启动它,因为即使在Windows中安装Linux Spyder,它也无法与spyder-kernel模块通信。

反之亦然。

我只是不知道(在我的研究中找不到)WSL&lt-&gt;Spyder中的Windows互操作功能。

您还没有解释您同时需要Windows和Linux Python环境的用例,但如果您要使用Spyder,并且您确实需要Windows和LinuxPython二进制文件,那么我相信您需要安装两次Spyder——一次在Windows中,一次在WSL/Linux中。

据我所知,Conda是在Linux中安装Spyder的最佳选择。你也可以看看这个Ask Ubuntu的答案,但不幸的是,对我来说不起作用。

另一个选项

如果你没有完全绑定到Spyder,你可以考虑Visual Studio代码(Windows版本)。它确实能够与Windows和Linux/WSL Python解释器进行交互。

在安装";远程-WSL";扩展(来自Microsoft),它可以通过在WSL内设置Linux服务器来与LinuxPython交互。您可以访问WindowsPython虚拟环境(当处于"Windows模式"时)和WSL虚拟环境(在"远程-WSL"模式时)。

虽然我自己还没有尝试过这些特定的功能,但根据我对VSCode和WSL的了解,我相当确定你可以:

  • 使用多个Windows Python版本设置Windows虚拟机
  • 使用多个Linux Python版本设置一个Linux虚拟机

它对这两个平台都有调试支持,可以支持变量检查(基于这个答案),并且可能通过其丰富的扩展库(目前有652个搜索"Python"返回的扩展)提供更多。

它绝对值得一看,看看它是否能满足您的需求,因为它是少数几个可以直接与WSL互操作的WindowsIDE之一。我的理解是Pycharm也有WSL集成,但我还没有亲自探索过。

最新更新