Успешная сборка Maturin на моем Mac, но ошибка на CentOS 6: как это исправить?

Вопрос или проблема

Проект Rust (PyO3) успешно собран на моем Mac, но возникла ошибка на CentOS6.

Cargo.toml

[package]
name = "pyutils"
version = "0.1.0"
edition = "2021"

[lib]
name = "pyutils"
crate-type = ["cdylib"]

[dependencies]
pyo3 = "0.20.0"

pyproject.toml

[build-system]
requires = ["maturin>=1.7,<2.0"]
build-backend = "maturin"

[project]
name = "pyutils"
requires-python = ">=3.8"
classifiers = [
    "Язык программирования :: Rust",
    "Язык программирования :: Python :: Реализация :: CPython",
    "Язык программирования :: Python :: Реализация :: PyPy",
]
dynamic = ["version"]
[tool.maturin]
features = ["pyo3/extension-module"]
Информация о Linux:
CentOS release 6.10 (Final)

Версия Linux 3.10.0.514.26.2.el7.x86_64 ([email protected]) (gcc версия 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #4 SMP Ср Авг 16 17:09:53 CST 2017

Linux 3.10.0.514.26.2.el7.x86_64 #4 SMP Ср Авг 16 17:09:53 CST 2017 x86_64 x86_64 x86_64 GNU/Linux
Информация об ошибке сборки:
(py311) \[bae@test pyutils-rs\]$ maturin build -i python3.11

🔗 Найдены привязки pyo3

🐍 Найден CPython 3.11 по адресу /home/bae/anaconda3/envs/py311/bin/python3.11

📡 Используются параметры сборки из pyproject.toml

Компиляция target-lexicon v0.12.16

Компиляция ...

Компиляция pyo3-ffi v0.20.3

Компиляция pyo3 v0.20.3

Компиляция pyo3-macros-backend v0.20.3

Компиляция pyo3-macros v0.20.3

error\[E0463\]: невозможно найти crate для `pyo3_macros`

\--\> /home/bae/.cargo/registry/src/rsproxy.cn-0dccff568467c15b/pyo3-0.20.3/src/prelude.rs:20:9
|

20 | pub use pyo3_macros::{pyclass, pyfunction, pymethods, pymodule, FromPyObject};

|         ^^^^^^^^^^^ невозможно найти crate

error\[E0463\]: невозможно найти crate для `pyo3_macros`

\--\> /home/bae/.cargo/registry/src/rsproxy.cn-0dccff568467c15b/pyo3-0.20.3/src/lib.rs:444:9

|

444 | pub use pyo3_macros::{pyfunction, pymethods, pymodule, FromPyObject};

|         ^^^^^^^^^^^ невозможно найти crate

error\[E0463\]: невозможно найти crate для `pyo3_macros`

\--\> /home/bae/.cargo/registry/src/rsproxy.cn-0dccff568467c15b/pyo3-0.20.3/src/lib.rs:455:9

|

455 | pub use pyo3_macros::pyclass;

|         ^^^^^^^^^^^ невозможно найти crate

error\[E0463\]: невозможно найти crate для `indoc`

\--\> /home/bae/.cargo/registry/src/rsproxy.cn-0dccff568467c15b/pyo3-0.20.3/src/lib.rs:385:5

|

385 |     indoc,    // Переэкспортировано для py_run

|     ^^^^^ невозможно найти crate

error\[E0432\]: нерешенные импорты `crate::FromPyObject`, `crate::FromPyObject`,
`crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`, `crate::FromPyObject`

\--\> /home/bae/.cargo/registry/src/rsproxy.cn-0dccff568467c15b/pyo3-0.20.3/src/buffer.rs:21:50
|

21 | use crate::{err, exceptions::PyBufferError, ffi, FromPyObject, PyAny, PyResult, Python};

|                                                  ^^^^^^^^^^^^

|

::: /home/bae/.cargo/registry/src/rsproxy.cn-0dccff568467c15b/pyo3-0.20.3/src/conversions/std/array.rs:4:10

|

4  |     ffi, FromPyObject, IntoPy, Py, PyAny, PyDowncastError, PyObject, PyResult, Python, ToPyObject,

|          ^^^^^^^^^^^^

Некоторые ошибки имеют детализированные объяснения: E0432, E0463.

Для получения более подробной информации об ошибке используйте `rustc --explain E0432`.

error: не удалось скомпилировать `pyo3` (lib) из-за 5 предыдущих ошибок

💥 maturin не удался

Причина: Не удалось собрать нативную библиотеку через cargo

Причина: Сборка Cargo завершилась с "код выхода: 101": `env -u CARGO PYO3_ENVIRONMENT_SIGNATURE="cpython-3.11-64bit" PYO3_PYTHON="/home/bae/anaconda3/envs/py311/bin/python3.11" PYTHON_SYS_EXECUTABLE="/home/bae/anaconda3/envs/py311/bin/python3.11" "cargo" "rustc" "--features" "pyo3/extension-module" "--message-format" "json-render-diagnostics" "--manifest-path" "/home/bae/rust/baidu/personal-code/pyutils-rs/Cargo.toml" "--lib"`

Я только что создал новый проект с помощью maturin new pyutils, также сборка завершилась неудачно на CentOS6, на моем Mac она прошла успешно.

Ответ или решение

Проблема, с которой вы столкнулись при сборке проекта на CentOS 6, может быть связана рядом факторов. Давайте рассмотрим возможные причины и их решения.

Причины ошибок

  1. Старая версия Rust: CentOS 6 может иметь старую версию инструментария Rust, что может вызывать проблемы с совместимостью, особенно с последними версиями библиотек, такими как PyO3.

  2. Отсутствие необходимых зависимостей: Ваша система может не иметь некоторых необходимых библиотек или инструментов для сборки проекта на Rust.

  3. Версия компилятора GCC: CentOS 6 обычно поставляется с устаревшей версией GCC, что может вызывать проблемы при сборке библиотек на Rust.

Шаги для устранения проблемы

Шаг 1: Обновите инструментальную среду Rust

Убедитесь, что у вас установлена последняя версия Rust. Для этого выполните следующие команды:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

После установки выполните команду:

rustup update

Это обновит вашу версию Rust до последней.

Шаг 2: Убедитесь, что все необходимые зависимости установлены

Убедитесь, что у вас установлены все необходимые зависимости для сборки Rust-приложений. Установите gcc, cargo, python3-devel и другие зависимости. Например:

sudo yum install gcc gcc-c++ python3-devel

Проверьте наличие и установите rustc, если он еще не установлен.

Шаг 3: Установите и настройте PyO3

Если у вас установлена старая версия PyO3 или библиотек, содержащих макросы, убедитесь, что они обновлены. Убедитесь, что в вашем Cargo.toml указываются правильные версии зависимостей:

[dependencies]
pyo3 = "0.20.0"

При этом не забывайте синхронизировать зависимости, выполнив:

cargo update

Шаг 4: Проверьте конфигурацию Python

Убедитесь, что у вас установлена верная версия Python и что maturin видит правильную версию. Выполните:

python3 -m pip install maturin

Убедитесь, что maturin установлен в окружении Python, используемом для сборки.

Шаг 5: Используйте новую версию CentOS или более нового дистрибутива

CentOS 6 достиг конца своего жизненного цикла, и многие инструменты и библиотеки могут не поддерживаться. Если возможно, рассмотрите возможность обновления до CentOS 7 или 8, где вы получите более свежие версии компонентов.

Итоги

Следуя указанным шагам, вы должны иметь возможность устранить проблему сборки вашего проекта на CentOS 6. Если после выполнения всех шагов проблемы сохраняются, возможно, имеет смысл рассмотреть возможность использования более нового дистрибутива Linux или обращения к сообществу Rust и PyO3 с конкретными ошибками и вашей системой.

Оцените материал
Добавить комментарий

Капча загружается...