$ python Python 3.12.9 (main, Feb 4 2025, 22:30:28) [Clang 18.0.3 (https://android.googlesource.com/toolchain/llvm-project d8003a456 on linux Type "help", "copyright", "credits" or "license" for more information. >>> import akshare as ak Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/akshare/__init__.py", line 4642, in <module> from akshare.stock_feature.stock_a_pe_and_pb import ( File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/akshare/stock_feature/stock_a_pe_and_pb.py", line 320, in <module> js_functions = py_mini_racer.MiniRacer() ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/py_mini_racer/py_mini_racer.py", line 178, in __init__ self.__class__.ext = _build_ext_handle() ^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/py_mini_racer/py_mini_racer.py", line 125, in _build_ext_handle raise RuntimeError("Native library not available at {}".format(EXTENSION_PATH)) RuntimeError: Native library not available at /data/data/com.termux/files/usr/lib/python3.12/site-packages/py_mini_racer/libmini_racer.glibc.so >>> print(ak.__version__) Exception ignored in: <function MiniRacer.__del__ at 0x775999a520> Traceback (most recent call last): File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/py_mini_racer/py_mini_racer.py", line 315, in __del__ self.ext.mr_free_context(getattr(self, "ctx", None)) ^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'mr_free_context' Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'ak' is not defined
用户提供的错误信息显示,在导入akshare时出现了RuntimeError,提示Native library not available。错误发生在py_mini_racer的MiniRacer初始化过程中,找不到libmini_racer.glibc.so这个本地库。然后用户尝试打印ak的版本时,又出现了NameError,因为之前的导入已经失败,导致ak未定义。
首先,我需要确定这个错误的原因。py_mini_racer是一个用于执行JavaScript的Python库,可能akshare依赖了它。当用户安装akshare时,py_mini_racer会自动安装,但可能在特定环境下(比如Termux,用户路径显示是Android的termux)编译或加载本地库时出现问题。因为Termux是基于Android的环境,可能缺少某些依赖库,或者架构不支持。
接下来,我需要思考解决方案。可能的解决步骤包括:安装必要的系统依赖,重新编译py_mini_racer,或者更换安装源。用户之前可能已经安装了akshare,但py_mini_racer的安装不完整。另外,用户的环境是Python 3.12.9,可能某些库还不兼容这个版本,但考虑到是未来的版本,可能只是测试环境。
另外,用户可能是在移动设备上使用Termux进行开发,而Termux的环境与常规的Linux环境有所不同,可能需要特别的处理步骤。例如,安装gcc、python-dev等编译工具来构建本地库。或者,使用预编译的wheel来避免编译步骤,但需要确认是否有适用于Termux的wheel。
可能的解决步骤是:
- 安装编译所需的依赖,比如build-essential, python3-dev等。
- 使用pip安装py_mini_racer时指定从源代码构建,或者安装预编译的版本。
- 如果问题依旧,尝试寻找替代方案,比如使用Docker环境,或者更换其他数据获取库。
此外,用户可能在使用Termux时,某些动态链接库的路径不正确,或者缺少glibc的兼容层。可能需要检查Termux的文档,确认如何安装glibc或其他必要库。
最后,还需要考虑用户是否遵循了正确的安装步骤,是否有权限问题,或者网络问题导致依赖下载不完整。可能需要建议用户清理缓存,重新安装相关包,或者升级pip和setuptools。
总结来说,用户的错误是由于py_mini_racer的本地库无法加载导致,需要解决Termux环境下的依赖和编译问题。我将逐步分析您遇到的py_mini_racer
依赖问题并提供解决方案:
错误诊断:
RuntimeError: Native library not available at /data/.../libmini_racer.glibc.so
➔ 核心问题是py_mini_racer
的二进制依赖未正确加载,常见于ARM架构设备(如安卓Termux)或缺少编译环境
解决方案:
第一步:安装编译依赖(Termux专用)
# 更新基础包
pkg update && pkg upgrade
# 安装编译工具链
pkg install python build-essential clang libxml2 libxslt
# 安装Python开发依赖
pip install wheel setuptools --upgrade
第二步:强制重新编译py_mini_racer
# 先卸载问题组件
pip uninstall py_mini_racer -y
# 从源码编译安装(添加--verbose查看细节)
CFLAGS="-Wno-error=implicit-function-declaration" pip install py_mini_racer --no-cache-dir --force-reinstall --verbose
第三步:验证安装
# 新建test.py测试文件
import py_mini_racer
ctx = py_mini_racer.MiniRacer()
ctx.eval("1+1") # 正常应返回2
print("V8引擎加载成功!")
替代方案(如编译仍失败):
# 使用qemu模拟x86环境(需Termux支持)
pkg install qemu-user-x86_64
proot -q qemu-x86_64 pip install akshare
# 或改用轻量级替代库
pip install akshare --no-deps # 跳过依赖
pip install requests pandas # 手动安装核心依赖
关键参数修正(数据获取示例):
import akshare as ak
# 使用无JavaScript依赖的接口
data = ak.stock_zh_a_spot() # 实时行情接口
print(data[data['代码'] == '000001']) # 筛选上证指数
# 历史数据替代方案
data = ak.stock_zh_a_daily(symbol="sh000001", adjust="hfq")
输出示例:
代码 名称 最新价 涨跌幅(%) 成交量(手)
0 000001 上证指数 3254.32 0.65 12345678
注意事项:
- Termux环境下建议定期执行: $$ \text{存储清理:} \quad \rm pkg autoclean && pip cache purge $$
- 若使用代理需配置环境变量:
export http_proxy="http://127.0.0.1:1080" export https_proxy="http://127.0.0.1:1080"
- 可通过
termux-chroot
获得更完整的Linux文件系统支持
性能优化建议:
# 禁用实时更新(减少资源消耗)
ak.option = {
"use_cached_session": True, # 启用缓存
"cache_timeout": 3600 # 1小时缓存
}
如问题仍未解决,建议提供以下信息以便进一步诊断:
termux-info
输出ldd --version
结果/proc/cpuinfo
中的处理器架构信息
相关推荐













