F2PY и Windows
Предупреждение
Поддержка F2PY для Windows не всегда соответствует поддержке Linux
Примечание
Документация ScPy содержит информацию о системных зависимостях, которые хорошо протестированы для Fortran.
В целом, при работе с F2PY в Windows возникают две проблемы:
- отсутствие активно развивающихся компиляторов Fortran с открытым исходным кодом, и
- проблемы с линковкой, связанные с библиотекой времени выполнения C для построения расширений Python на C.
Цель этого раздела — установить руководство по разработке и расширению модулей Fortran для Python нативно с помощью F2PY в Windows.
В настоящее время поддерживаются следующие инструментальные цепочки:
- Компиляторы Mingw-w64 C/C++/Fortran
- Компиляторы Intel
- Clang-cl + Flang
- MSVC + Flang
Обзор
С точки зрения пользователя, самой совместимой с UNIX средой разработки Windows является среда эмуляции, либо через подсистему Windows для Linux, либо с помощью Docker. Аналогичным образом, традиционные методы виртуализации, такие как VirtualBox, также являются приемлемыми методами для разработки инструментов UNIX в Windows.
Поддержка Windows нативно обычно ограничена использованием коммерческих компиляторов. Однако, по состоянию на 2022 год, большинство коммерческих компиляторов имеют бесплатные планы, которые достаточно для общего использования. Кроме того, языковые возможности Fortran, поддерживаемые f2py, означают, что часто не нужны новые инструментальные цепочки. Вкратце, для конечного пользователя в порядке приоритета:
- Классические компиляторы Intel (коммерческие)
-
Они поддерживаются активно, хотя могут применяться ограничения на лицензирование, подробно описанные в F2PY и Windows Intel Fortran.
Подходит для общего использования для тех, кто создает нативные программы Windows, строя на основе MSVC.
- MSYS2 (с открытым исходным кодом)
-
В сочетании с проектом
mingw-w64, инструментальные цепочкиgfortranиgccмогут использоваться для нативной разработки программ Windows. - Подсистема Windows для Linux
-
Предполагая использование
gfortran, это можно использовать для кросс-компиляции приложений Windows, но это значительно сложнее. - Conda
-
Поддержка Windows для компиляторов в
condaобеспечивается за счет использования бинарных файлов MSYS2, однако они устарели, поэтому не рекомендуются (по состоянию на 30-01-2022). - Компиляторы PGI (коммерческие)
-
Не поддерживаются, но достаточно, если имеется существующая лицензия. Работает нативно, но был заменен Nvidia HPC SDK, без нативной поддержки Windows.
- Cygwin (с открытым исходным кодом)
-
Также может использоваться для
gfortran. Однако уровень совместимости с API POSIX, предоставляемый Cygwin, предназначен для компиляции программного обеспечения UNIX в Windows, а не для создания нативных приложений Windows. Это означает, что необходима кросс-компиляция.
Рассмотренные до сих пор комплекты компиляции совместимы с теперь устаревшим np.distutils механизмом сборки, который предоставляется интерфейсом командной строки F2PY. Дополнительное использование систем сборки (meson, cmake) описанное в F2PY и системы сборки, позволяет использовать более гибкий набор компиляторов, включая:
- Intel oneAPI
-
Новые компиляторы Intel (
ifx,icx) основаны на LLVM и могут использоваться для нативной компиляции. Требования к лицензированию могут быть высокими. - Классический Flang (с открытым исходным кодом)
-
Основа компиляторов PGI была использована для создания «классической» или старой версии Flang. Это можно скомпилировать из исходного кода и использовать нативно. LLVM Flang еще не поддерживает Windows (30-01-2022).
- LFortran (с открытым исходным кодом)
-
Один из двух компиляторов, основанных на LLVM. Пока не все поддерживаемые F2PY Fortran-коды могут быть скомпилированы (30-01-2022), но он использует MSVC для нативной линковки.
Базовая конфигурация
Для данного документа мы будем предполагать следующие базовые инструменты:
- Используемая среда разработки — поддерживаемый сообществом Microsoft Visual Studio Code
- Используемый терминал — Windows Terminal
- Предполагаемая среда оболочки — Powershell 7.x
-
- Python 3.10 из магазина Microsoft Store, и его можно проверить с
-
Get-Command python.exeсоответствуетC:\Users\$USERNAME\AppData\Local\Microsoft\WindowsApps\python.exe
- Набор инструментов Microsoft Visual C++ (MSVC)
При такой базовой конфигурации мы будем далее рассматривать матрицу конфигураций следующим образом:
Компилятор Fortran | Компилятор C/C++ | Источник |
|---|---|---|
Intel Fortran | MSVC / ICC | exe |
GFortran | MSVC | MSYS2/exe |
GFortran | GCC | WSL |
Классический Flang | MSVC | Исходный код / Conda |
Anaconda GFortran | Anaconda GCC | exe |
Для понимания основных проблем, требующих такой матрицы, подробный пост Паули Виртанена о wheel с Fortran для Windows — отличное ресурс. Забавное объяснение интерфейса двоичного приложения (ABI) можно найти в этом посте ЖанХейда Менеида.
PowerShell и MSVC
MSVC устанавливается либо через пакет Visual Studio, либо через более легкий (предпочтительный) Набор инструментов для Visual Studio с параметром Desktop development with C++.
Примечание
Это может занять значительное время, так как включает загрузку примерно 2 ГБ и требует перезагрузки.
Возможен использование полученной среды из стандартного командного окна. Однако, удобнее использовать разработчика PowerShell, с профилем в Windows Terminal. Этого можно добиться, добавив следующий блок в раздел profiles->list файла JSON, используемого для настройки Windows Terminal (см. 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.
Пути к Python из магазина Microsoft Store
Обсуждаемая здесь Windows-версия Python устанавливается по непредсказуемому пути с использованием хэша. Это необходимо добавить в переменную PATH.
$Env:Path += ";$env:LOCALAPPDATA\packages\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\localcache\local-packages\python310\scripts"
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/f2py/windows/index.html