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

Anaconda环境中用ctypes加载.so文件的Python版本兼容问题

问题:Python 3.10.6虚拟环境无法加载共享对象myFile.so

问题详情

  • 在Anaconda基础环境(Python 3.8.5)及Python 3.9.15版本的虚拟环境中,可通过以下代码正常加载并调用共享对象myFile.so:
import ctypes
clibrary = ctypes.CDLL(r"C:\Users\FirstName LastName\Documents\Project\myFile.so")
clibrary.doThings(ctypes.c_int(10), ctypes.c_float(0.6))
  • 切换至Python 3.10.6版本的虚拟环境testEnvironment后,运行相同代码抛出错误:
FileNotFoundError: Could not find module 'C:\Users\FirstName LastName\Documents\Project\myFile.so' (or one of its dependencies). Try using the full path with constructor syntax.
  • 已尝试的无效操作:
    • 复制基础环境的os.environ["PATH"]到虚拟环境
    • 直接在myFile.so所在目录运行代码

分析与解决方向

  1. 重新编译共享对象适配Python 3.10
    Python 3.10对C API进行了部分变更(如废弃接口移除、ABI细节调整),myFile.so可能是基于Python 3.8/3.9的C API编译的,导致3.10.6无法兼容加载。需重新编译myFile.so,编译时指定链接Python 3.10的头文件和库文件。

  2. 检查依赖库兼容性
    使用Windows工具dumpbin /dependents myFile.so查看myFile.so依赖的系统库或Python相关库,确认这些库在3.10.6虚拟环境中是否存在、版本是否匹配。Python 3.10依赖的MSVC运行时版本可能与3.8/3.9不同,需确保对应版本的运行时已安装。

  3. 调整ctypes加载方式
    尝试显式添加依赖路径或更换加载函数:

    import os
    import ctypes
    # 添加共享对象所在目录到DLL搜索路径
    os.add_dll_directory(r"C:\Users\FirstName LastName\Documents\Project")
    clibrary = ctypes.CDLL("myFile.so")
    clibrary.doThings(ctypes.c_int(10), ctypes.c_float(0.6))
    

    也可尝试用ctypes.WinDLL替代ctypes.CDLL(Windows下部分共享库需用WinDLL加载)。

  4. 临时降级虚拟环境版本
    如果暂时无法重新编译共享对象,可继续使用Python 3.9.15版本的虚拟环境,该版本已验证可正常加载myFile.so。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:50:44