Модуль ржавчины pyo3 убивает Python при импорте

Я пишу свой первый модуль Python на основе Rust, и он убивает процесс Python при импорте. Я довел его до довольно минимального примера, основанного на пример html-py-ever (который у меня работает без сбоев).

Я использую Python 3.8 на macbook M1, Python скомпилирован для arm64.

% python -c "import platform;print(platform.machine())"
arm64

Мой вывод, команда воспроизведения с использованием файлов, вставленных ниже. Установка должна позаботиться о любых требованиях Python:

(rust) jeremytemp@Jeremy-McGibbons-MacBook-Pro minimal % pip install -e . && python test.py
Obtaining file:///Users/jeremytemp/rust/minimal
Installing collected packages: minimal
  Attempting uninstall: minimal
    Found existing installation: minimal 0.1.0
    Uninstalling minimal-0.1.0:
      Successfully uninstalled minimal-0.1.0
  Running setup.py develop for minimal
Successfully installed minimal-0.1.0
zsh: killed     python test.py

источник/lib.rs:

use pyo3::{prelude::*, wrap_pyfunction};

#[pyfunction]
fn foo() -> PyResult<u64>{
    let u: u64 = 1;
    Ok(u)
}

#[pymodule]
fn minimal(_py: Python<'_>, m: &PyModule) -> PyResult<()> {
    m.add_function(wrap_pyfunction!(foo, m)?)?;
    Ok(())
}

Груз.томл:

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

[dependencies]
pyo3 = { features = ["extension-module"] }

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

setup.py:

from setuptools import setup
from setuptools_rust import RustExtension

setup(
    rust_extensions=[RustExtension("minimal.minimal")],
)

setup.cfg:

[metadata]
name = minimal
version = 0.1.0
license = MIT

[options]
packages = minimal
zip_safe = False
setup_requires = setuptools-rust >= 0.12.1;
python_requires = >=3.8
include_package_data = True

minimal/__init__.py:

from .minimal import *

test.py:

import minimal

вывод заморозки пипса

(rust) jeremytemp@Jeremy-McGibbons-MacBook-Pro minimal % pip freeze
attrs==21.4.0
beautifulsoup4==4.11.1
certifi==2021.10.8
iniconfig==1.1.1
# Editable Git install with no remote (minimal==0.1.0)
-e /Users/jeremytemp/rust/minimal
packaging==21.3
pluggy==1.0.0
py==1.11.0
pyparsing==3.0.8
pytest==7.1.2
semantic-version==2.9.0
setuptools-rust==1.3.0
soupsieve==2.3.2.post1
tomli==2.0.1
typing_extensions==4.2.0

Что я делаю не так? Есть ли какие-либо шаги, которые я могу предпринять, чтобы получить более полезный результат отладки, чем «убитый»?

Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
0
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не очень удовлетворительный ответ, но пример отлично работает на моей машине с Windows. Я предполагаю, что это проблема с pyo3 на Mac M1.

Другие вопросы по теме