SMAC3/pyfr не удается собрать с помощью GCC: «назначение члена, доступного только для чтения» в RapidJSONLinux

Ответить
Anonymous
 SMAC3/pyfr не удается собрать с помощью GCC: «назначение члена, доступного только для чтения» в RapidJSON

Сообщение Anonymous »

(Я использовал искусственный интеллект, чтобы перефразировать свой вопрос)

Среда
  • ОС: Ubuntu 24.04 (Docker-контейнер)
  • Python: 3.11.15 (управляется uv)
  • GCC: /opt/conda/bin/x86_64-conda-linux-gnu-c++ (GCC 13+)
  • swig: 4.2.0 (устанавливается через apt-get)
  • Менеджер пакетов: uv (astral.sh)
Проблема
Установка smac не удалась, поскольку его зависимостьyrfr==0.9.0 не компилируется. Ошибка представляет собой отклонение строгого режима C++ в пакете RapidJSON зерновых:

Код: Выделить всё

uv add smac
Полная ошибка

Код: Выделить всё

× Failed to build `pyrfr==0.9.0`
├─▶ The build backend returned an error
╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1)

[stderr]
Deprecated command line option: -modern. Ignored, this option is now always on.
Deprecated command line option: -py3. Ignored, this option is no longer supported.
./include/rfr/nodes/k_ary_node.hpp:1: Warning 401: Nothing known about base class 'k_ary_node_minimal'

In file included from ./include/cereal/archives/json.hpp:56,
from ./include/rfr/forests/regression_forest.hpp:21,
from ./include/rfr/trees/k_ary_tree.hpp:26,
from pyrfr/regression_wrap.cpp:3360:
./include/cereal/external/rapidjson/document.h: In member function
'rapidjson::GenericStringRef& rapidjson::GenericStringRef::operator=(const rapidjson::GenericStringRef&)':
./include/cereal/external/rapidjson/document.h:319:82: error: assignment of read-only member
'rapidjson::GenericStringRef::length'
319 |     GenericStringRef& operator=(const GenericStringRef& rhs) { s = rhs.s; length = rhs.length; }
|                                                                           ~~~~~~~^~~~~~~~~~~~
error: command '/opt/conda/bin/x86_64-conda-linux-gnu-c++' failed with exit code 1
Что я пробовал
  • Код: Выделить всё

    CXXFLAGS="-fpermissive" uv add smac
    [/b] — uv не передает переменную env в подпроцесс сборки.
  • Код: Выделить всё

    CXXFLAGS="-fpermissive" uv pip install pyrfr
    [/b] — результат тот же, флаг не доходит до компилятора.
  • Код: Выделить всё

    conda install -c conda-forge swig
    [/b] — неприменимо, работает в venv, управляемом uv, внутри Docker, а не conda.
Основная причина включает в себя старую версию зерновых, которая включает в себя старую версию RapidJSON. В document.h:319 оператор копирования-присваивания присваивает константному члену (), который более новая версия GCC (13+) отклоняет как серьезную ошибку. Старая версия GCC приняла это с предупреждением.
Вопрос
Как передать -fpermissive (или эквивалент) компилятору C++ при сборке Pyrfr через uv? Альтернативно, существует ли готовое колесо дляpyfr>=0.9.0 в Linux x86_64/Python 3.11?
Я специально ищу решения, которые работают внутри:
  • в качестве менеджера пакетов (не напрямую pip, а не conda)
  • Контейнер Docker, в котором у меня есть root, но цепочка инструментов сборки взята из conda-forge
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»