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

Python包外部导入触发OSError:libcilin_similarity.dylib找不到求助

解决Python包导入时无法找到动态库及文件的问题

这是个很典型的路径问题,核心原因是直接运行__init__.py和从外部导入时,Python的当前工作目录完全不同:

  • 直接运行__init__.py时,你的工作目录就是cilin_similarity包所在的文件夹,所以相对路径libcilin_similarity.dylib和cilin.txt都能被正常找到。
  • 但从外部的try.py导入包时,工作目录是try.py所在的文件夹,这时候用相对路径就会去try.py的目录找文件,自然找不到目标资源。

而你尝试用绝对路径时出现文件打开错误,大概率是只修改了动态库的路径,但read_cilin调用里的cilin.txt还是用了相对路径——动态库内部打开文件时依然会基于当前工作目录去查找,所以同样会失败。

解决方案:用包的绝对路径定位所有资源文件

修改你的__init__.py代码,通过__file__变量获取包的绝对路径,再安全拼接所有资源文件的路径:

# mypackage/__init__.py
import ctypes
import os

# 获取包的绝对目录路径(不管从哪里导入,这个路径都是固定的)
package_dir = os.path.dirname(os.path.abspath(__file__))

def init_lib():
    print("init_lib")
    # 拼接动态库的绝对路径
    lib_path = os.path.join(package_dir, "libcilin_similarity.dylib")
    lib = ctypes.CDLL(lib_path)
    # 拼接cilin.txt的绝对路径,再传入动态库
    cilin_path = os.path.join(package_dir, "cilin.txt").encode('UTF-8')
    lib.read_cilin(cilin_path)
    lib.similarity.restype = ctypes.c_float
    return lib

def compare(lib, first_word, second_word):
    print("this should work")
    print(second_word, lib.similarity(first_word.encode('UTF-8'), second_word.encode('UTF-8')))

关键逻辑说明:

  1. os.path.abspath(__file__):获取当前__init__.py文件的绝对路径,不受工作目录影响。
  2. os.path.dirname(...):从文件路径中提取出包所在的目录(也就是cilin_similarity文件夹的绝对路径)。
  3. os.path.join(...):跨平台安全拼接目录和文件名,避免手动拼接路径时出现的斜杠、路径分隔符问题。

这样不管你从哪个位置导入这个包,代码都会从包的实际安装目录去查找动态库和cilin.txt,彻底解决路径不一致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:36:21