F2PY 和 Windows #
警告
F2PY 对 Windows 的支持与 Linux 支持不同,操作系统特定的标志可以通过python -m numpy.f2py
一般来说,在 Windows 上使用 F2PY 存在两个问题:
缺乏积极开发的 FOSS Fortran 编译器,并且,
与用于构建 Python-C 扩展的 C 运行时库相关的链接问题。
本节的重点是建立通过 Windows 上的 F2PY 本地开发和扩展 Python 的 Fortran 模块的指南。
概述#
从用户的角度来看,与 UNIX 最为兼容的 Windows 开发环境是通过模拟,或者通过 Linux 上的 Windows 子系统,或者由 Docker 提供支持。同样,VirtualBox 等传统虚拟化方法也是在 Windows 上开发 UNIX 工具的合理方法。
原生 Windows 支持通常会受到商业编译器使用之外的阻碍。然而,截至 2022 年,大多数商业编译器都有免费计划,足以满足一般用途。此外,(Fortran 2003 的部分覆盖)支持的 Fortran 语言功能f2py
意味着通常不需要更新的工具链。简而言之,对于最终用户来说,按照使用顺序:
- 经典英特尔编译器(商业)
尽管许可限制可能适用,如F2PY 和 Windows Intel Fortran中进一步详细说明,但这些都得到积极维护。
适合那些通过 MSVC 构建本机 Windows 程序的人的一般用途。
- MSYS2(自由软件)
与该
mingw-w64
项目结合使用,gfortran
工具gcc
链可用于本地构建 Windows 程序。- Linux 的 Windows 子系统
假设使用
gfortran
,这可以用于交叉编译 Windows 应用程序,但要复杂得多。- conda
conda
通过提取 MSYS2 二进制文件可以促进Windows 对编译器的支持,但是这些二进制文件已经过时,因此不建议(截至 2022 年 1 月 30 日)。- PGI 编译器(商业)
无需维护,但如果存在现有许可证就足够了。可以在本机运行,但已被 Nvidia HPC SDK 取代,没有本机 Windows 支持。
- 赛格温 (FOSS)
也可用于
gfortran
.然而,Cygwin 提供的 POSIX API 兼容层旨在在 Windows 上编译 UNIX 软件,而不是构建本机 Windows 程序。这意味着需要交叉编译。
到目前为止描述的编译套件与F2PY CLI 公开的现已弃用的 构建后端兼容。 F2PY 和构建系统中描述的
np.distutils
其他构建系统使用(meson
、 )允许更灵活的编译器后端集,包括:cmake
- 英特尔oneAPI
较新的 Intel 编译器 (
ifx
、icx
) 基于 LLVM,可用于本机编译。许可要求可能很繁重。- 经典法兰 (FOSS)
PGI 编译器的主干被拆解为 Flang 的“经典”或遗留版本。这可以从源代码编译并本地使用。LLVM Flang尚不支持 Windows (30-01-2022)。
- LFortran (FOSS)
两个基于 LLVM 的编译器之一。并非所有 F2PY 支持的 Fortran 都可以编译 (30-01-2022),但使用 MSVC 进行本机链接。
基线#
对于本文档,我们将假设使用以下基本工具:
正在考虑的 IDE 是社区支持的Microsoft Visual Studio Code
正在使用的终端是Windows 终端
假设shell环境是Powershell 7.x
- 来自Microsoft Store 的Python 3.10 ,可以使用以下命令进行测试
Get-Command python.exe
决心C:\Users\$USERNAME\AppData\Local\Microsoft\WindowsApps\python.exe
Microsoft Visual C++ (MSVC) 工具集
有了这个基线配置,我们将进一步考虑如下配置矩阵:
Fortran编译器 |
C/C++ 编译器 |
来源 |
---|---|---|
英特尔Fortran |
MSVC / 国际商会 |
EXE文件 |
GFortran |
MSVC |
MSYS2/exe |
GFortran |
海湾合作委员会 |
WSL |
经典法兰 |
MSVC |
来源/conda |
Anaconda GFortran |
海湾合作委员会Python |
EXE文件 |
为了了解激发对此类矩阵的需求的关键问题, Pauli Virtanen 的关于 Windows 版 Fortran 的深入文章是一个极好的资源。关于应用程序二进制接口 (ABI) 的有趣解释可以在JeanHeyd Meneide的这篇文章中找到。
Powershell 和 MSVC #
MSVC 通过 Visual Studio Bundle 或带有设置的更轻(首选)的
Visual Studio 构建工具进行安装
。Desktop development with C++
笔记
这可能需要大量时间,因为它包含大约 2GB 的下载并且需要重新启动。
可以通过标准命令提示符使用生成的环境。然而,使用开发人员 powershell以及Windows Terminal 中的配置文件会更令人愉快。这可以通过将以下块添加到profiles->list
用于配置 Windows 终端的 JSON 文件部分来实现(请参阅 参考资料):Settings->Open JSON file
{
"name": "Developer PowerShell for VS 2019",
"commandline": "powershell.exe -noe -c \"$vsPath = (Join-Path ${env:ProgramFiles(x86)} -ChildPath 'Microsoft Visual Studio\\2019\\BuildTools'); Import-Module (Join-Path $vsPath 'Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll'); Enter-VsDevShell -VsInstallPath $vsPath -SkipAutomaticLocation\"",
"icon": "ms-appx:///ProfileIcons/{61c54bbd-c2c6-5271-96e7-009a87ff44bf}.png"
}
现在,测试编译器工具链可能如下所示:
# New Windows Developer Powershell instance / tab
# or
$vsPath = (Join-Path ${env:ProgramFiles(x86)} -ChildPath 'Microsoft Visual Studio\\2019\\BuildTools');
Import-Module (Join-Path $vsPath 'Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll');
Enter-VsDevShell -VsInstallPath $vsPath -SkipAutomaticLocation
**********************************************************************
** Visual Studio 2019 Developer PowerShell v16.11.9
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
cd $HOME
echo "#include<stdio.h>" > blah.cpp; echo 'int main(){printf("Hi");return 1;}' >> blah.cpp
cl blah.cpp
.\blah.exe
# Hi
rm blah.cpp
还可以检查环境是否已正确更新$ENV:PATH
。
Windows 应用商店 Python 路径#
此处讨论的 Python 的 MS Windows 版本使用哈希安装到非确定性路径。这需要添加到PATH
变量中。
$Env:Path += ";$env:LOCALAPPDATA\packages\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\localcache\local-packages\python310\scripts"