Windows Subsystem for Linux#

本页介绍如何在 Windows Subsystem for Linux (WSL) 中使用 PyAnsys 库,更具体地说是 PyMAPDL。WSL 是在 Windows 10、Windows 11 和 Windows Server 2019 上原生运行 Linux 二进制可执行文件的兼容性层。更多信息,请参阅:

本页将指导您在 Windows 上安装 WSL,然后展示如何将其与 MAPDL、PyMAPDL 和 Docker 结合使用。

Note

由于 WSL 仍在不断开发中,因此很难随时更新本指南。如果您发现任何问题或有与 WSL 相关的疑问,请随时在 GitHub 存储库 中提交问题。

Install WSL#

WSL 有两个版本: WSL1 和 WSL2。由于 WSL2 比 WSL1 有了许多改进,因此您应该升级到并使用 WSL2。

按照 Microsoft 的说明安装 WSL ,请访问 Microsoft: Install WSL

Install the CentOS7 WSL distribution#

使用 PyAnsys 库时,应使用 CentOS7 WSL 发行版。

您可以使用 CentOS-WSL 包或 CentOS WSL 包中的非官方 WSL 发行版安装该发行版。

Using the Ubuntu WSL distribution#

Ubuntu 是 Ansys 产品支持的操作系统。但尚未在 WSL 环境中对其进行测试。请谨慎使用。

Install Ansys products in WSL#

Prerequisites#

如果使用的是 CentOS 7 ,在安装 MAPDL 之前,必须先安装一些必需的库:

sudo yum install openssl openssh-clients mesa-libGL mesa-libGLU motif libgfortran

如果使用的是 Ubuntu ,请按照 Run MAPDL: Ubuntu 中的说明操作。

Install Ansys products#

要在 WSL Linux 中安装 Ansys 产品,请执行以下步骤:

  1. 从客户门户下载 Ansys Structures 映像( Current Release )。

    如果在 Windows 机器上下载镜像,则应随后将镜像从下载文件夹复制到 WSL。

  2. 使用此命令解压缩源代码文件( tar.gz ):

    tar xvzf STRUCTURES_2021R2_LINX64.tgz
    
  3. 要安装 MAPDL,请进入解压文件所在的文件夹并运行此命令:

    sudo ./INSTALL -silent -install_dir /usr/ansys_inc/ -mechapdl
    

    where:

    • -silent : 启动静默安装,即不显示图形用户界面。

    • -install_dir /path/ : 指定产品或许可证管理器的安装目录。如果要安装到默认位置,可以省略 -install_dir 参数。如果设置了符号链接,默认位置为 /ansys_inc。否则,默认位置为 /usr/ansys_inc

    • -<product_flag> : 指定要安装的一个或多个产品。 如果省略该参数,则会安装所有产品。The Ansys, Inc. Installation Guides in the Ansys Help provides a list of valid values for the product_flags argument in Chapter 6 of the Linux Installation Guide and Chapter 7 of the Windows Installation Guide.

      在前面的 MAPDL 示例中,只需指定 -mechapdl 标记。

直接在 /ansys_inc/usr/ansys_inc 中安装 MAPDL 后,使用此命令创建一个符号链接:

sudo ln -s /usr/ansys_inc /ansys_inc

默认情况下,PyMAPDL 希望 MAPDL 可执行文件位于 /usr/ansys_inc 中。无论安装与否,都应该使用符号链接将该目录与 Ansys 安装目录 (/*/ansys_inc`)关联起来。

安装后的设置#

开放许可证服务器通信端口#

理论上: 您应在 Windows 控制面板 中为许可证服务器通信打开端口 10552325 。有关设置高级 Windows 防火墙选项的步骤,请参阅 Microsoft 的 如何在 Windows 10 防火墙中打开端口

事实上: 如果您想使用 WSL Linux 映像来运行 Docker 映像,并托管该 Docker 映像,则此方法可行。如果在打开这些端口的情况下运行 Docker 镜像时使用了 '-p' 标志, Docker 镜像就会使用这些端口与 Windows 许可服务器成功通信。

如果要在 CentOS 7 映像中运行 MAPDL 并使用 Windows 许可服务器,打开端口可能无法正常工作,因为 Windows 防火墙似乎会阻止来自 WSL 的所有流量。 出于安全考虑,您仍应尝试在防火墙中打开端口 10552325 并验证 MAPDL 安装是否可以与 Windows 主机通信。如果设置防火墙规则后仍有问题, 可能需要关闭 WSL 以太网虚拟接口的 Windows 防火墙。这可能会带来一些未知的副作用和安全风险,请谨慎使用。 有关详细信息,请参阅 Disable firewall on WSL ethernet

在 WSL 中设置指向 Windows 主机许可证服务器的环境变量#

Windows 主机的 IP 地址会在 WSL /etc/hosts 文件中的 host.docker.internal 名称之前给出。

Note

如果未安装 Docker,可能无法使用此 host.docker.internal 定义。

下面是 WSL /etc/hosts 文件的示例:

# 该文件由 WSL 自动生成。
# 要停止自动生成该文件,请在 /etc/wsl.conf 中添加以下条目:
# [network]
# generateHosts = false
127.0.0.1       localhost
127.0.1.1       AAPDDqVK5WqNLve.win.ansys.com   AAPDDqVK5WqNLve

192.168.0.12    host.docker.internal
192.168.0.12    gateway.docker.internal
127.0.0.1       kubernetes.docker.internal

# 以下行适用于支持IPv6的主机
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

您可以在 WSL =/.bashrc 文件中添加下几行,以创建包含此 IP 地址的环境变量:

winhostIP=$(grep -m 1 host.docker.internal /etc/hosts | awk '{print $1}')
export ANSYSLMD_LICENSE_FILE=1055@$winhostIP

Launch MAPDL in WSL#

要在 WSL 中启动 MAPDL,必须启动 MAPDL 进程。下面是一个示例。

/ansys_inc/v222/ansys/bin/ansys222 -grpc

这将启动一个工作目录为当前目录的 MAPDL 实例。如果要更改工作目录,可以使用 -dir 标志。

/ansys_inc/v222/ansys/bin/ansys222 -grpc -dir /tmp/ansys_jobs/myjob

在 Windows 主机操作系统中启动 MAPDL#

您可以使用 Windows 主机操作系统中的 MAPDL 安装程序启动 MAPDL 实例。为此,请运行以下代码:

from ansys.mapdl.core import launch_mapdl

mapdl = launch_mapdl(
    exec_file="/mnt/c/Program Files/ANSYS Inc/v231/ANSYS/bin/winx64/ANSYS231.exe",
)

许可服务器通信的开放端口 所述,Windows 主机操作系统和 WSL 通过一个虚拟网络连接,两者拥有不同的 IP 地址。 PyMAPDL 会尽力检测 Windows 主机的 IP 地址。为此,它会解析 WSL 中 ip route 命令给出的输出。但是,如果发现该 IP 地址不正确,可以像这样指定要连接的 IP 地址:

from ansys.mapdl.core import launch_mapdl

mapdl = launch_mapdl(
    exec_file="/mnt/c/Program Files/ANSYS Inc/v231/ANSYS/bin/winx64/ANSYS231.exe",
    ip="172.23.112.1",
)

您可能需要完全关闭 Microsoft 防火墙,或至少关闭 WSL 网络连接的防火墙。为此,请遵循 Disable firewall on WSL ethernet

有关更多信息,请参阅问题 从 WSL 启动 MAPDL 或在 GitHub 存储库问题 中打开一个新问题。

连接到在 WSL 中运行的 MAPDL 实例#

要连接到运行 MAPDL 实例的 WSL 实例,需要指定 WSL 实例的 IP 地址:

>>> from ansys.mapdl.core import Mapdl
>>> mapdl = Mapdl(ip="127.0.0.1", port=50053)

其他信息#

WSL 中的 IP 地址和 Windows 主机#

理论上: 您应该能够使用 WSL /etc/hosts 文件中指定的 IP 地址访问 Windows 主机。该 IP 地址通常为 127.0.1.1。这意味着本地 WSL 的 IP 地址是 127.0.0.1

事实上: 使用 IP 地址 127.0.1.1 连接 Windows 主机几乎是不可能的。不过,可以在同一个 WSL /etc/hosts 文件中使用 host.docker.internal 主机名。这是一个随机分配的 IP 地址,在定义许可证服务器时会出现问题。不过,按照这里提到的方法更新 .bashrc 文件就可以解决这个问题。

从 WSL 角度看,IP 地址 127.0.0.1 是 WSL CentOS 的 IP 地址,而 Windows 主机的 IP 地址通常是 127.0.1.1

Docker 以 WSL 发行版为基础构建 PyMAPDL 镜像。因此,PyMAPDL 运行在 Linux WSL 发行版上,而 WSL 发行版运行在 Windows 主机上。由于 Docker 镜像与 WSL 共享资源,因此它也与 WSL 发行版共享内部 IP 地址。

Ansys installation flags#

获得帮助#

要获取许可证服务器信息,请使用以下方法之一访问 INSTALL 文件,然后检查最后几行。

Method 1#
./INSTALL --help
Method 2#
cat ./INSTALL

客户端的许可证服务器信息#

-licserverinfo 参数指定许可证服务器的客户端使用的信息。此参数仅在静默安装(INSTALL)时有效。

单一许可证服务器#

单个许可证服务器的格式为

-licserverinfo LI_port_number:FLEXlm_port_number:hostname

下面是一个示例:

./INSTALL -silent -install_dir /ansys_inc/ -mechapdl -licserverinfo 2325:1055:winhostIP
三台许可证服务器#

三个许可证服务器的格式为

-licserverinfo LI_port_number:FLEXlm_port_number:hostname1,hostname2,hostname3

下面是一个示例:

./INSTALL -silent -install_dir /ansys_inc/ -mechapdl -licserverinfo 2325:1055:abc,def,xyz

安装语言#

参数 -lang 指定安装使用的语言。

指定要安装的产品的文件#

您可以指定一个 options 文件,列出要安装的产品。这样做时,必须使用 -productfile 参数指定 options 文件的完整路径。

禁用 WSL 以太网的防火墙#

在 WSL 以太网上禁用防火墙有两种方法。

Method 1#

此方法会显示一个通知:

Set-NetFirewallProfile -DisabledInterfaceAliases "vEthernet (WSL)"

Method 2#

此方法不显示通知:

powershell.exe -Command "Set-NetFirewallProfile -DisabledInterfaceAliases \"vEthernet (WSL)\""

Reference: The information has been obtained from WSL Windows Toolbar Launcher repository. More specifically from the Troubleshooting section Firewall rules

Windows 10 上的端口转发#

您可以使用 Windows PowerShell 命令在 Windows 10 上进行端口转发。

WSL 和 Windows 之间的链接端口#

该命令用于连接 WSL 和 Windows 之间的端口:

netsh interface portproxy add v4tov4 listenport=1055 listenaddress=0.0.0.0 connectport=1055 connectaddress=XXX.XX.XX.XX

View all forwards#

该命令允许您查看所有转发:

netsh interface portproxy show v4tov4

Delete port forwarding#

使用此命令可以删除端口转发:

netsh interface portproxy delete v4tov4 listenport=1055 listenaddres=0.0.0.0 protocol=tcp

Reset Windows network adapters#

您可以使用此代码重置 Windows 网络适配器:

netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
netsh winsock reset

Restart the WSL service#

您可以使用此命令重新启动 WSL 服务:

Get-Service LxssManager | Restart-Service

Stop all processes with a given name#

使用该命令可以停止所有指定名称的进程。

Get-Process "ANSYS212" | Stop-Process

Install xvfb in CentOS 7#

如果要复制 CI/CD 行为,必须安装 xvfb 软件包,如以下命令所示。有关详细信息,请参阅 .ci 文件夹。

yum install xorg-x11-server-Xvfb

Note

如果您想复制 CI/CD 行为或在 Docker 容器内进行开发,则应使用 Ubuntu 作为基础操作系统。你可以在 创建自己的 MAPDL docker 容器 中找到创建自己的 MAPDL Ubuntu 容器的说明,并在 Develop on containers 中找到如何使用它在容器上进行开发的说明。

Notes#

  • 在 WSL 上运行时,PyMAPDL 只适用于共享内存并行 (SMP)。这就是为什么要加入 -smp 标志的原因。

  • 由于 VPN 和 INTEL MPI 之间存在一些不兼容问题,因此在调用 MAPDL 时应使用标记 -mpi msmpi。本 WSL 指南未针对 VPN 编写,也未在 VPN 上进行测试。如果在连接 Windows 主机、许可证服务器或 MAPDL 实例时遇到问题,请断开 VPN 并重试。