Вопрос или проблема
я использую сборку scipy из исходников
Во время выполнения
python -m pip install -r requirements/build.txt -r requirements/dev.txt
matplotlib выдает ошибку.
llvm 18.1.0rc
Я собрал Openblas из исходников для arm64, указал путь в переменной окружения PKG-CONFIG-PATH и вставил его в созданную папку сборки после первой неудачи команды ниже.
python dev.py build
lld-link: ошибка: слишком много ошибок, выполнение остановлено (используйте /errorlimit:0, чтобы увидеть все ошибки)
flang-new: ошибка: команда компоновщика завершилась с кодом выхода 1 (используйте -v, чтобы увидеть вызов)
[60/1300] Компиляция C-объекта scipy/special/cython_special.cp312-win_arm64.pyd.p/meson-generated_cython_special.c.obj
ninja: сборка остановлена: выполнение подкоманды завершилось неудачей.
Сборка не удалась!
я также вижу
-- Проверка работоспособности компилятора Fortran: C:/Program Files/LLVM/bin/flang-new.EXE
-- Проверка работоспособности компилятора Fortran: C:/Program Files/LLVM/bin/flang-new.EXE - не работает
-- Конфигурация не завершена, произошли ошибки!
ERR:
CMake Ошибка в C:/Program Files/CMake/share/cmake-3.31/Modules/CMakeTestFortranCompiler.cmake:59 (сообщение):
Компилятор Fortran
"C:/Program Files/LLVM/bin/flang-new.EXE"
не может скомпилировать простую тестовую программу.
Он завершает работу с следующим выводом:
Сменить директорию: 'C:/Users/USERNAME/Desktop/johndoe/scipy/build/meson-private/cmake_xsimd/CMakeFiles/CMakeScratch/TryCompile-0hh5mx'
Выполнение команд сборки: C:/Users/USERNAME/Desktop/johndoe/scipy/venv/Scripts/ninja.exe -v cmTC_b1f75
[1/4] C:\windows\system32\cmd.exe /C "C:\PROGRA~1\LLVM\bin\FLANG-~1.EXE -cpp -fms-runtime-lib=dll_dbg -E C:\Users\USERNAME\Desktop\johndoe\scipy\build\meson-private\cmake_xsimd\CMakeFiles\CMakeScratch\TryCompile-0hh5mx\testFortranCompiler.f > CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f && "C:\Program Files\CMake\bin\cmake.exe" -E cmake_ninja_depends --tdi=CMakeFiles\cmTC_b1f75.dir\FortranDependInfo.json --lang=Fortran --src=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f --out=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f --dep=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f.d --obj=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj --ddi=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj.ddi --src-orig=C:\Users\USERNAME\Desktop\johndoe\scipy\build\meson-private\cmake_xsimd\CMakeFiles\CMakeScratch\TryCompile-0hh5mx\testFortranCompiler.f"
[2/4] "C:\Program Files\CMake\bin\cmake.exe" -E cmake_ninja_dyndep --tdi=CMakeFiles\cmTC_b1f75.dir\FortranDependInfo.json --lang=Fortran --dd=CMakeFiles\cmTC_b1f75.dir\Fortran.dd @CMakeFiles\cmTC_b1f75.dir\Fortran.dd.rsp
[3/4] C:\PROGRA~1\LLVM\bin\FLANG-~1.EXE -IC:\Users\USERNAME\Desktop\johndoe\scipy\build\meson-private\cmake_xsimd\CMakeFiles\CMakeScratch\TryCompile-0hh5mx -fms-runtime-lib=dll_dbg -ffixed-line-length-72 -o CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj -c CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f
[4/4] C:\windows\system32\cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --msvc-ver=1941 --intdir=CMakeFiles\cmTC_b1f75.dir --rc=rc --mt="" --manifests -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj /out:cmTC_b1f75.exe /implib:cmTC_b1f75.lib /pdb:cmTC_b1f75.exe.dbg /version:0.0 /machine:ARM64 /debug /INCREMENTAL /subsystem:console -libpath:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/lib/arm64" -libpath:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/atlmfc/lib/arm64" -libpath:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/ucrt/arm64" -libpath:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/arm64" -libpath:"C:/Program Files/LLVM/lib" -libpath:"C:/Program Files/LLVM/lib/clang/18/lib/windows" && cd ."
НЕУДАЧА: cmTC_b1f75.exe
C:\windows\system32\cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --msvc-ver=1941 --intdir=CMakeFiles\cmTC_b1f75.dir --rc=rc --mt="" --manifests -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj /out:cmTC_b1f75.exe /implib:cmTC_b1f75.lib /pdb:cmTC_b1f75.exe.dbg /version:0.0 /machine:ARM64 /debug /INCREMENTAL /subsystem:console -libpath:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/lib/arm64" -libpath:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/atlmfc/lib/arm64" -libpath:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/ucrt/arm64" -libpath:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/arm64" -libpath:"C:/Program Files/LLVM/lib" -libpath:"C:/Program Files/LLVM/lib/clang/18/lib/windows" && cd ."
RC Pass 1: команда "rc /fo CMakeFiles\cmTC_b1f75.dir/manifest.res CMakeFiles\cmTC_b1f75.dir/manifest.rc" завершилась неудачей (код выхода 0) с следующим выводом:
нет такого файла или каталога
ninja: сборка остановлена: выполнение подкоманды завершилось неудачей.
Ответ или решение
Чтобы устранить ошибки сборки SciPy из исходников на Windows Arm64, необходимо обратить внимание на несколько ключевых аспектов, упомянутых в вашем вопросе. Давайте разберем проблему детально и предоставим возможные решения.
1. Ошибки компиляции с использованием flang-new
Судя по сообщениям об ошибках, основная проблема заключается в том, что Fortran-компилятор flang-new
, который вы используете, не может создать тестовую программу. Это может быть связано с неверной конфигурацией среды разработки или несовместимостью версий инструментов.
Рекомендации:
- Убедитесь, что у вас установлена последняя стабильная версия
LLVM
иCMake
. Например,LLVM 18.0
будет более стабильным, чем18.1.0rc
. - Проверьте, правильно ли установлены переменные окружения, такие как
PKG_CONFIG_PATH
и пути к библиотекам. Эти пути должны указывать на необходимые заголовочные файлы и библиотеки, особенно дляOpenBLAS
. - Если у вас возникли проблемы с
flang
, рассмотрите возможность использования других Fortran-компиляторов, таких какgfortran
, если это возможно на вашей системе.
2. Проблемы с линковщиком lld-link
Сообщение lld-link: error: too many errors emitted, stopping now
указывает на то, что в процессе линковки возникает множество ошибок, что мешает завершению сборки.
Рекомендации:
- Попробуйте использовать флаг
/errorlimit:0
, чтобы получить больше информации о найденных ошибках. Это может помочь выявить, какие именно проблемы возникают. - Убедитесь, что все зависимости правильно установлены и имеют соответствующие пути. Если вы были вынуждены изменять конфигурации, проверьте правильность всех изменений.
3. Проверка среды разработки
Проверьте, работает ли ваша установка Visual Studio и все необходимые компиляторы:
- Откройте Visual Studio и создайте новый проект, попробуйте скомпилировать простой
C
илиFortran
файл, чтобы убедиться, что комплект инструментов работает правильно. - Убедитесь, что установлены все необходимые компоненты для поддержки разработки под ARM64, включая C++ и C#.
4. Установка и конфигурация зависимостей
Перепроверьте, правильно ли вы установили все зависимости SciPy:
- Выполните команду:
python -m pip install -r requirements/build.txt python -m pip install -r requirements/dev.txt
- Если ошибка по-прежнему возникает на
matplotlib
, попробуйте установить её отдельно:python -m pip install matplotlib
Заключение
Сборка SciPy из исходников на Windows Arm64 может быть сложной задачей из-за множества зависимостей и взаимодействий. Внимательное следование процедурами установки, правильная настройка переменных окружения и использование стабильных версий необходимых инструментов помогут вам избежать большинства распространенных ошибок.
Если ни одно из предложенных решений не сработает, рекомендуется обратиться на форумы или к сообществу SciPy для дальнейшей помощи, предоставив в них более подробные логи ошибок и сведения о вашей среде разработки.