如何从 WSL2 上的 Ubuntu 连接 Conda 和 MySQL 等本地 Windows 应用程序?

如何从 WSL2 上的 Ubuntu 连接 Conda 和 MySQL 等本地 Windows 应用程序?

我最近在 Windows 11 中安装了 WSL2 (Ubuntu),以了解其命令和使用方法。一切运行正常,但我无法从 Ubuntu 中访问我的 Windows 应用程序。

例如,在 Windows 中,我安装了 Anaconda 和 MySQL,我可以从 Git Bash、CMD 或 PowerShell 访问它们,但不能从 WSL2 中的 Ubuntu 访问它们。

我大部分时间都使用 WSL 进行工作,但无法使用本地 Windows 应用程序。

我尝试将我的 Anaconda 和 MySQL 的路径导出到 zsh,但仍然不起作用:

export PATH="/mnt/c/Users/verma/anaconda3/Library/bin:$PATH"

有什么办法可以解决这个问题吗?

答案1

如果我正确理解了您的评论(和问题主体),听起来您可能真的在问两个不同的问题:

  • 从 Ubuntu/WSL2 开始,如何跑步安装在 Windows 中的类似 Anaconda 的应用程序。
  • 从 Ubuntu/WSL2 开始,如何使用 Ubuntu 应用程序(如 MySQL 客户端)来连接到在 Windows 中运行的网络应用程序(例如 MySQL 服务器)。
在 WSL 中从 Ubuntu 运行 Windows 应用程序

这部分很简单,但也伴随着警告。

在默认的 WSL 配置中,运行 Windows 应用程序有两个部分:

  • 确保它在路径上或提供完全限定的路径
  • 使用完全的名称,包括.exe扩展名。Linux 不像 Windows 那样具有内核级的自动扩展假设。

例如,要运行记事本:

notepad.exe

因为它位于默认的 Windows 路径上(WSL 自动将其提供给 Ubuntu)。

例如,要运行 Microsoft Word:

/mnt/c/Program\ Files/Microsoft\ Office/root/Office16/WINWORD.EXE

由于 Office 不在默认的 Windows 路径上,因此您需要指定完整的命令行。

请注意,某些应用程序可能需要通过 PowerShell 脚本进行某些配置。我不确定,但我认为 Anaconda 可能属于这一类。在这种情况下,您需要先执行 PowerShell,然后启动应用程序。例如:

powershell -c conda

然而 (这里有龙),请注意,即使您确实运行了它,在 WSL 中的 Ubuntu 中使用 Windows Python 通常也不是一个好主意。Windows 版本的 Python 无法理解 Linux 路径或进程等,而 WSL/Ubuntu 默认会将这些路径或进程传递给它。

虚拟环境由于同样的原因无法工作,因为 Windows Python 尝试设置的路径在 Linux/Ubuntu/WSL 中无效。

此外,任何本机代码模块都将在视窗环境,而不是 Ubuntu 环境,具有相同的路径/进程限制。事情很快就会变得混乱,无论是对您还是对代码/解释器而言。

在 Ubuntu/WSL 中,使用 Linux 版本的 Python,如果需要,还可以使用 Anaconda。在 Windows 中,使用 Windows 版本。

在 WSL2 中从 Ubuntu 连接到 Windows 网络应用程序/服务器

WSL2 实际上是在与 Windows 主机不同的虚拟化 NAT 网络上运行的。因此,您需要确定 Windows 主机要使用的正确 IP 地址,以便从 WSL2 网络连接到它。

假设在受支持的 Windows 版本上默认安装 WSL/Ubuntu,mDNS 通常是最佳选择。

您可以在 Ubuntu 中使用的 Windows 主机的 mDNS 名称如下:

MyComputerName.local

只要您没有更改 WSL 默认的 DNS 解析器,它就会与您hostname在 Ubuntu 中运行时看到的相同。

您可以通过以下方式以编程方式确定这一点:

  • 获取编程语言/环境中的主机名
  • 追加.local

例如,在 Bash 中,要连接到 Windows MySQL 服务器:

  1. 在 Ubuntu 中安装 MySQL 客户端:

    sudo apt install mysql-client
    
  2. 通过以下方式连接到 Windows MySQL 服务器"$(hostname).local"

    mysql --hostname=$(hostname).local --user=me -p mydb
    

相关内容