写点pyo3的东西(

This commit is contained in:
shenjack-5600u 2024-02-10 21:26:57 +08:00
parent 77a899c765
commit 9c22f6c7b3
Signed by: shenjack
GPG Key ID: FDF9864E11C7E79F
5 changed files with 46 additions and 15 deletions

5
ica-rs/Cargo.lock generated
View File

@ -569,6 +569,7 @@ dependencies = [
"ed25519",
"ed25519-dalek",
"hex",
"pkg-config",
"pyo3",
"rust_socketio",
"serde",
@ -871,9 +872,9 @@ dependencies = [
[[package]]
name = "pkg-config"
version = "0.3.27"
version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
[[package]]
name = "platforms"

View File

@ -30,4 +30,4 @@ version = "0.20.2"
rust_socketio = { git = "https://github.com/shenjackyuanjie/rust-socketio.git", branch = "mult_payload" }
[build-dependencies]
pkg-config = "0.3.29"

View File

@ -11,11 +11,29 @@ fn pyo3_config() {
// wsl
#[cfg(target_os = "linux")]
{
env::set_var("PYO3_PRINT_CONFIG", "1");
env::set_var("PYO3_PYTHON", "/usr/bin/python3.11");
// env::set_var("PYO3_PRINT_CONFIG", "1");
// env::set_var("PYO3_PYTHON", "/usr/bin/python3.10");
// cargo:rustc-link-lib=static=
// println!("cargo:rustc-link-lib=python3.10");
// println!("cargo:rustc-link-arg-bins=-Wl,-Bstatic");
// println!("cargo:rustc-link-arg-bins=-Wl,--whole-archive");
// println!("cargo:rustc-link-arg-bins=-lpython3.10");
// println!("cargo:rustc-link-arg-bins=-Wl,-Bdynamic");
// println!("cargo:rustc-link-arg-bins=-Wl,--no-whole-archive");
// println!("cargo:rustc-link-arg-bins=-lz");
// println!("cargo:rustc-link-arg-bins=-lexpat");
// println!("cargo:rustc-link-arg-bins=-lutil");
// println!("cargo:rustc-link-arg-bins=-lm");
// println!("cargo:rustc-link-arg-bins=-Wl,--export-dynamic");
// pkg_config::Config::new()
// .atleast_version("3.8")
// .probe("python3-embed")
// .unwrap();
}
}
fn main() {
// pyo3_config();
pyo3_config();
}

View File

@ -24,6 +24,7 @@ fn any_event(event: Event, payload: Payload, _client: RawClient) {
}
fn ws_main() {
py::init_py();
// define a callback which is called when a payload is received
// this callback gets the payload as well as an instance of the
// socket to communicate with the server
@ -34,7 +35,10 @@ fn ws_main() {
// println!("{}", "已经登录到 icalingua!".green());
// }
match value.as_str() {
Some("authSucceed") => println!("{}", "已经登录到 icalingua!".green()),
Some("authSucceed") => {
py::run();
println!("{}", "已经登录到 icalingua!".green())
}
Some("authFailed") => {
println!("{}", "登录到 icalingua 失败!".red());
panic!("登录失败")
@ -67,7 +71,6 @@ fn ws_main() {
}
fn main() {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::DEBUG)
.init();

View File

@ -1,14 +1,23 @@
// use inline_python::{python, Context};
// use pyo3::prelude::*;
use pyo3::{prelude::*, types::IntoPyDict};
// #[pyclass]
// #[pyo3(name = "BotStatus")]
// pub struct BotStatusPy {}
#[pyclass]
#[pyo3(name = "BotStatus")]
pub struct BotStatusPy {}
// pub fn run() {
//
// }
pub fn run() {
Python::with_gil(|py| {
let bot_status = BotStatusPy {};
let _bot_status = PyCell::new(py, bot_status).unwrap();
let locals = [("state", _bot_status)].into_py_dict(py);
py.run("print(state)", None, Some(locals)).unwrap();
});
}
pub fn init_py() {
pyo3::prepare_freethreaded_python();
}
// pub fn run() {
// let con: Context = python! {