自研平台开发日志(二)

踩坑小记

同花顺的数据接口iFinD还算好用,但是由于VBA的接口只能在Windows环境下使用,所以本机暂时还只能拿纯python的接口来用,配置各种依赖的过程耗时加起来也有一天一夜了,在过程中踩到的坑也在此予以记录,作为之后安装其他接口的前置经验。

iFinD数据接口

首先对系统进行升级以后,到「同花顺数据接口」下载Linux SDK,下载好后缀为.tar.gz的压缩包以后cd进入下载文件夹,直接使用如下命令语句解压缩:

# tar -xzvf  <file.tar.gz> -C <destination_folder>
tar -xzvf  ./下载/THSDataInterface_Linux_20230629 -C ./回测系统/iFinD

当然了,作为刚刚走完一个配置流程的人,我可以直接在根目录的 usr/lib 里面创建好“ bin64 ”这个文件夹,把压缩包直接在这解压完再使用mv等命令操作好,但是这样的话文章写起来就没啥意义了,因为所有这些流程都有内部的逻辑勾稽关系,所以还是当自己是第一次安装来完成配置。

在「同花顺数据接口-帮助中心」的“帮助手册”中可以下载Linux版SDK的安装指引,但是指引的环境依赖等内容就一笔带过了:“在调用前必须调用 ldd libShellExport.so, ldd hqdatafeed 和 ldd libFTDataInterface.so 查看本库所需要依赖的环境是否已经齐全, 如果不齐全,请使用 yum 或者 apt-get 安装。”真正的困难就在这几个依赖的安装上。

libShellExport.so

直接运行命令行会报错:

根据指引的说法,如果没有依赖可以apt-get(试过yum但反正不适合Ubuntu系统)得到相应的文件,但其实这几个.so文件都不能这样得到,仔细观察后才发现libShellExport.so、hqdatafeed、libFTDataInterface.so 都在解压缩/bin64的文件夹里,可以直接终端命令行切入文件夹再ldd相应的文件进行编译,

按照chatGPT老师的答案,它们的文件本质如下。

资料来源:chatGPT

"libShellExport.so"是一个文件。在Linux上,.so扩展名通常表示共享库文件(Shared Object),也称为动态链接库。这些文件包含可由多个程序共享和重用的函数和数据。

通常,共享库文件具有以下特点:

  • 它们包含编译后的代码和数据,可以被其他程序调用。
  • 多个程序可以使用同一个共享库文件,减少了代码复制和内存占用。
  • 当共享库文件更新时,所有使用它的程序都可以受益于这些更新,而无需重新编译或重新部署。

因此,"libShellExport.so"作为一个.so文件,可能是一个供其他程序使用的共享库文件。具体来说,"libShellExport.so"可能包含一些可供Shell脚本或其他程序调用的功能。

但是其实ldd完了似乎也没没什么用,过程中没有报错,然后继续按照指引,在该文件路径下打开终端“python installiFinDPy.py”会返回成功安装好文件的信息,说是在“ /home/hrz/anaconda3/lib/python3.9/site-packages/ ”这个路径下安装成功了:

 本以为万事大吉,用vscode打开conda环境下的python 3.9.7,调用iFinDPy是会失败的。

所以回到“ /home/hrz/anaconda3/lib/python3.9/site-packages/ ”的路径查看是否有iFinDPy模块,在该路径的交互界面直接 ctrl + f 可以查找文件,然后发现只有.pth后缀的文件:

 打开一看文件里只有一行:/usr/lib/bin64。

解谜iFinDPy.pth

接下来的内容是我将诸多试错融汇起来得到的思考总结,会有一些遗漏,但是整体上足以覆盖关键的信息点。在怎么找都没有找到iFinDPy这个模块以后,自然就能得出这个API是想通过配置在环境变量“ /home/hrz/anaconda3/lib/python3.9/site-packages/ ”下的.pth自动索引到iFinDPy模块,那么首先通过命令行python命令唤醒的是anaconda下的3.9.7版本,自然无法将模块配置到“ 根文件夹目录下的usr/lib ”

进入真正的根文件夹的方式其实很简单,但是不会有特殊显示(都是base):

cd /

 这种时候因为涉及了以前不知道怎么安装python所以弄了十几个版本的历史遗留问题,还是希望能直接用conda下的默认python完成安装,因此做了以下尝试:

1、修改“ /home/hrz/anaconda3/lib/python3.9/site-packages/ ”下的.pth文件的内容,变更为:

        /usr/lib/bin64  --> /home/hrz/anaconda3/lib/python3.9/site-packages/bin64

结果vscode里面还是找不到相应模块,尝试失败;

2、不修改.pth内容,把bin64整个文件夹复制到 /usr/lib 中,再在vscode中进行调用,这时终于 可以找到模块 了,只不过报了其他错误:

沿着这个线索,在根目录下的 /usr/lib/bin64 执行ldd编译,返回以下内容:

就是这个 not found 的共享文件涉及最开始指引中所说的“ 若是没有依赖可以使用apt-get获得相应依赖 ” ,如果不配置好该依赖而只是完成了对已有的三个共享文件的ldd 操作 (libShellExport.so、hqdatafeed、 libFTDataInterface.so),vscode中调用iFinDPy模块仍会报OSError的错误,不过是跟libidn11相关的依赖问题。

libidn11配置

 幸运的是,百度完以后发现,这个包是有公开获取渠道的:「libidn11

下载完.deb直接dpkg遇到了之前总是遇到的“E: Sub-process /usr/bin/dpkg returned an error code (1)”的问题,反正又是dpkg抽风了,这次索性写了一个bash脚本“dpkgfix.sh”放到了用户目录下,具体内容写在了另一篇文章里「云平台网络——环境配置(一)」。

 

 这次处理好dpkg再进行.deb文件的安装:

sudo dpkg -i libidn11_1.33-2.2ubuntu2_amd64.deb

 然后再对 /usr/lib/bin64 的那仨文件执行ldd就很丝滑了,之前“ not found ”的libidn.so.11这次也有了对应的地址,再在vscode里面看,iFinDPy的模块就有颜色了,python可以找到该模块了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值