python-2.7 - 找不到 py_module_initializer!在 rust 中构建 python 模块时
问题描述
Rust 非常新。
我正在尝试使用 rust-cypthon 在 Rust 中构建一个 python 模块。目前,我可以访问 cpython 类型但不能调用 py_module_initializer!我认为这是使模块在 python 中运行所必需的。
编译代码,将扩展名更改为 .so 并将文件与我的 python 脚本一起放入并导入时,我收到此错误:
ImportError: dynamic module does not define init function (initpyext_rust_onboard)
货运.toml
[lib]
crate-type = ["cdylib"]
[dependencies]
csv = "1.1.1"
serde = "1.0.99"
serde_derive="1.0"
serde_json= "1.0"
serde_yaml = "0.7.1"
[dependencies.cpython]
version = '0.3.0'
default-features = false
features = ["python27-sys", "extension-module-2-7"]
导入到 lib.rs 的依赖项
#[macro_use]
extern crate serde;
extern crate serde_derive;
#[macro_use]extern crate cpython;
use std::fs::File;
use std::collections::HashMap;
use std::borrow::Cow;
use std::error::Error;
use cpython::{Python, PyObject, PyResult, PyString, PyFloat};
use csv::DeserializeRecordsIter;
解决方案
编译代码时,将扩展名更改为
.so
并将文件放入我的 python 脚本
你是从什么开始重命名的?rust-cpython文档说
在 Mac OS 上,您需要将输出从 重命名
*.dylib
为*.so
. 在 Windows 上,您需要将输出从 重命名*.dll
为*.pyd
。
在 Linux 上你不应该重命名任何东西。
问题可能是您实际上并没有构建共享对象。你有
[lib] crate-type = ["dylib"]
但是rust-cpython自述文件说
[lib]
crate-type = ["cdylib"]
注意c
!cdylib
和dylib
生锈的东西不同。
推荐阅读
- java - 程序流程问题
- spring-webflux - 如果在 Project Reactor 中使用 publishOn,订阅不会打印出任何日志
- xml - Xsl-transformation with grouping,获取祖先属性值
- python - python selenium bs4,不是从 https url 而是从带有服务器目录的 src 下载图像
- matlab - 如何在 Matlab 中从高斯 Copula 生成条件分布?
- python - “manage.py startapp”不创建 db.sqlite3
- matlab - 为什么 Matlab 阶乘函数将整数视为非整数?
- r - Rfast hd.eigen() 返回 NA,但基本 eigen() 不返回
- pentaho - Pentaho / PDI:如果加载作业(在元作业内)失败,则自动将值增加一
- python-3.x - 为什么我不能将布尔运算符分配给变量?