すべてconda環境内で、pyO3を使用してRustからnumpyを使用しようとしています。pyO3 をリンクするために、conda を使用して GCC ツールチェーンもインストールしました。
を表示するなどの簡単なことを実行できるようになりsys.path
ました。ただし、numpy をインポートしようとすると、次のようになります。
use pyo3::prelude::*;
use pyo3::types::IntoPyDict;
fn main() -> PyResult<()> {
let gil = Python::acquire_gil();
let py = gil.python();
let r = py.import("numpy");
match r {
Ok(_) => println!("OK"),
Err(e) => e.print(py),
}
Ok(())
}
次のことが起こります。
Traceback (most recent call last):
File "<HOME>/anaconda3/envs/pyrust/lib/python3.7/site-packages/numpy/__init__.py", line 140, in <module>
from . import _distributor_init
File "<HOME>/anaconda3/envs/pyrust/lib/python3.7/site-packages/numpy/_distributor_init.py", line 33, in <module>
with RTLD_for_MKL():
File "<HOME>/anaconda3/envs/pyrust/lib/python3.7/site-packages/numpy/_distributor_init.py", line 18, in __enter__
import ctypes
File "<HOME>/anaconda3/envs/pyrust/lib/python3.7/ctypes/__init__.py", line 7, in <module>
from _ctypes import Union, Structure, Array
ImportError: <HOME>/anaconda3/envs/pyrust/lib/python3.7/lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PyUnicode_FromFormat
興味深いことに、単にタイプpython -c "import numpy"
すると、問題は発生しません。
RUSTFLAGS="-C linker=$CC" cargo +nightly run
それが役立つ場合は、コードをビルドして実行するために使用します。