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

Python包内加载Rust生成原生库的路径配置问题咨询

解决方案

方案1:通过包初始化文件注入搜索路径(无需修改构建流程)

不需要改动UniFFI自动生成的tinymath.py文件,只需在你自行维护的src/tinymath/__init__.py中加入路径预处理逻辑,在导入自动生成的模块前,先将包内的原生库目录加入系统动态库搜索路径即可,示例代码如下:

import os
import sys

# 获取当前包的绝对路径
package_dir = os.path.dirname(os.path.abspath(__file__))

if sys.platform == "linux":
    # 注入Linux动态库搜索路径
    os.environ["LD_LIBRARY_PATH"] = f"{package_dir}:{os.environ.get('LD_LIBRARY_PATH', '')}"
    # Python 3.10+ 支持在Linux下使用add_dll_directory指定ctypes搜索路径
    if hasattr(os, "add_dll_directory"):
        os.add_dll_directory(package_dir)
elif sys.platform == "darwin":
    # 注入macOS动态库搜索路径
    os.environ["DYLD_LIBRARY_PATH"] = f"{package_dir}:{os.environ.get('DYLD_LIBRARY_PATH', '')}"
    if hasattr(os, "add_dll_directory"):
        os.add_dll_directory(package_dir)

# 导入自动生成模块的所有内容,对外暴露接口
from .tinymath import *

方案2:构建时修正动态库链接路径(适合正式对外发布)

如果需要将包发布供他人使用,更规范的做法是使用平台专用工具在构建阶段修正wheel包的动态库搜索路径(rpath),全程不需要修改任何运行时代码:

  • macOS平台使用delocate工具:先执行pip install delocate安装依赖,构建完wheel包后执行delocate-wheel dist/你的包文件名.whl,工具会自动把原生库打包到正确位置,并且设置rpath让系统优先在包内查找依赖。
  • Linux平台使用auditwheel工具:先执行pip install auditwheel安装依赖,构建完wheel包后执行auditwheel repair dist/你的包文件名.whl,实现和delocate相同的效果。

你可以将上述处理步骤加入构建脚本或者CI流程,实现全自动化处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:03