You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust嵌套工作区中无法导入其他包的问题排查

问题描述

项目结构

├── Cargo.lock
├── Cargo.toml
├── lib1
│   ├── Cargo.lock
│   ├── Cargo.toml
│   ├── pyproject.toml
│   └── src
│       └── lib.rs
└── lib2
    ├── Cargo.lock
    ├── Cargo.toml
    ├── pyproject.toml
    └── src
        └── lib.rs

相关文件内容

根目录Cargo.toml

[workspace]
resolver = "2"
members = ["lib1", "lib2"]

lib1/Cargo.toml

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

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

[dependencies]
pyo3 = "0.22.0"

lib2/Cargo.toml

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

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

[dependencies]
pyo3 = "0.22.0"
lib1 = {path = "../lib1"}

操作与错误

在lib1/src/lib.rs中定义了函数sum_as_strings,想要在lib2/src/lib.rs中通过use lib1::sum_as_strings;导入使用。但从lib2目录运行maturin develop时,出现以下错误:

$ maturin develop
🔗 Found pyo3 bindings
🐍 Found CPython 3.11 at /home/ignoring_gravity/nested-pyo3-example/.venv/bin/python
📡 Using build options features from pyproject.toml
   Compiling lib2 v0.1.0 (/home/ignoring_gravity/nested-pyo3-example/lib2)
error[E0432]: unresolved import `lib1`
 --> lib2/src/lib.rs:2:5
  |
2 | use lib1::sum_as_strings;
  |     ^^^^ use of undeclared crate or module `lib1`
  |
help: there is a crate or module with a similar name
  |
2 | use lib2::sum_as_strings;
  |     ~~~~

请问哪里操作有误或遗漏了什么?


解决方案

问题出在lib1的编译类型配置和函数可见性上:

  1. 修改lib1的crate-type:
    cdylib仅用来编译供非Rust程序(比如Python)调用的动态库,无法被其他Rust crate直接依赖。要让lib1同时支持Python调用和Rust crate依赖,需要添加rlib类型(Rust标准库格式)。

修改lib1/Cargo.toml的[lib]部分:

[lib]
name = "lib1"
crate-type = ["cdylib", "rlib"]  # 同时支持动态库和Rust库格式
  1. 确保lib1的函数公开可访问:
    在lib1/src/lib.rs中,要被外部引用的函数必须加上pub关键字,示例:
pub fn sum_as_strings(a: &str, b: &str) -> String {
    // 函数实现逻辑
    format!("{}", a.parse::<i32>().unwrap() + b.parse::<i32>().unwrap())
}
  1. 重新执行构建:
    可以回到项目根目录运行maturin develop -m lib2/Cargo.toml,或者直接在lib2目录下重新执行maturin develop,此时依赖就能正常解析。

内容的提问来源于stack exchange,提问作者ignoring_gravity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:36:08