- Вопрос или проблема
- Ответ или решение
- Причины ошибок
- Шаги для устранения проблемы
- Шаг 1: Обновите инструментальную среду Rust
- Шаг 2: Убедитесь, что все необходимые зависимости установлены
- Шаг 3: Установите и настройте PyO3
- Шаг 4: Проверьте конфигурацию Python
- Шаг 5: Используйте новую версию CentOS или более нового дистрибутива
- Итоги
Вопрос или проблема
Проект 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, может быть связана рядом факторов. Давайте рассмотрим возможные причины и их решения.
Причины ошибок
-
Старая версия Rust: CentOS 6 может иметь старую версию инструментария Rust, что может вызывать проблемы с совместимостью, особенно с последними версиями библиотек, такими как PyO3.
-
Отсутствие необходимых зависимостей: Ваша система может не иметь некоторых необходимых библиотек или инструментов для сборки проекта на Rust.
- Версия компилятора 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 с конкретными ошибками и вашей системой.