Spec-Zone.ru › NumPy 2.0

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)

При такой базовой конфигурации мы будем далее рассматривать матрицу конфигураций следующим образом:

Матрица поддержки, exe подразумевает установщик Windows

Компилятор 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"
  • F2PY и Windows Intel Fortran
  • F2PY и Windows с MSYS2
  • F2PY и Conda в Windows
  • F2PY и PGI Fortran в Windows

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/f2py/windows/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API