我最近在 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 服务器:
在 Ubuntu 中安装 MySQL 客户端:
sudo apt install mysql-client
通过以下方式连接到 Windows MySQL 服务器
"$(hostname).local"
:mysql --hostname=$(hostname).local --user=me -p mydb