因为要参与币安去中心化交易所binance.org(以下统称DEX)的交易,需要编程设置API,折腾了我十多天,今天总算搞定了。这个过程太曲折了,值得写篇文章来纪念下。
币安去中心化交易所开放没多久,官方在针对API指导文件时给一些大致说明与要求,并没有完整的说明文档,也没有中文版本,当然前面提到的CCXT库还没来得及支持。还好的是币安为了推广DEX开发,特意设BNB大奖举行了编程大赛,然后选择最好的官方引用,其中针对python版本的打包的SDK库是https://github.com/sammchardy/python-binance-chain/。使用这个库的好处就是作者把认证什么都搞好了,按他指定的格式就可以实现查询、账户交易等。于是我就按他的要求安装这个库。
我使用的python编译环境是Pycharm+Anaconda。Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,很多为库用这个安装会非常方便。
错误1:pkg-config包安装不成功
首先我选择的安装方式是在Pycharm中安装python-binance-chain,步骤如下:设置-项目-编译器-点+号添加-搜索python-binance-chain安装就行了。
遇到的第一个错误如下图
这个错误是由于pkg-config缺失引起的,手动安装这个包,搜索发现没有。
使用Anaconda的终端用pip install pkg-config的结果是Could not find a version that satisfies the requirement libtool (from versions: ) No matching distribution found for libtool。 没找到合适的版本。
这个错误几经摸索发现Mac可以直接在Anaconda这里搜索安装pkg-config,这个问题总算解决了。
错误2:secp256k1包安装不成功
解决了pkg-config包的问题,继续安装python-binance-chain,这次报错的原因是secp256k1包安装不成功,根据指导https://github.com/ludbb/secp256k1-py#installation,Precompiled binary wheels isavailable for Python 2.7, 3.3, 3.4, and 3.5 on Linux. To take advantage of those you need to use pip >= 8.1.0.
发现这个包没说支持Python 3.6,所以我一直不成功,我先到Python2.7下面安装,可以成功。
返回去继续安装python-binance-chain,安装的过程还需要安装一个aiohttp,它要求python至少为3.5,所以2.7也不行,必须在3.5下安装才可以,于是我又返回到Python 3.5,顺利安装了secp256k1,又顺利安装了python-binance-chain。
安装之后去运行,发现错误很多,主要是因为python-binance-chain支持要求Python为3.6或3.7,而我在3.5下安装。错误主要是因为python3.5不支持f”格式串,于是把所有相关的改成python3.5支持的格式。比如把python 3.6格式下的
req_path = f'wallet/{wallet_name}’
改成python 3.5格式下的
req_path = 'wallet/{}'.format(wallet_name)
但是在我下单之后还是一直报错:APIError(code=401):signature verification failed
认证失败,我咨询客服,他们说我在认证中出了问题,可是python-binance-chain本身是已经完成认证了啊。
继续去看Github上别人发的问题issue,好像别人并没有碰到这个问题。在看别人发的问题中,发现有个人也在用这个包,并留下了联系方式,于是赶紧加了他。和他聊之后他指出最大的问题是我的Python版本不对导致认证失效,应该安装3.6或3.7 因为他安装好之后交易是正常的。
于是我把问题主要集中于在Python3.6上安装secp256k1. 换两台电脑,用各种方法都会出现一个报错:Failed building wheel for secp256k1
没有提示缺少包什么的,于是继续找多人询问,最后发现有人说安装这个包之前必须安装好以下几个
On OS X the necessary homebrew packages are:
automake
pkg-config
libtool
libffi
gmp
可问题是使用Pycharm、pip、Anaconda搜索,我都安装不了automake、libtool、libffi。
最后找到一个方式,在Anaconda 云端这里找到了,比如安装automake,在其网页搜索找到https://anaconda.org/conda-forge/automake,里面提示
install this package with conda run one of the following:
conda install -c conda-forge automake
conda install -c conda-forge/label/gcc7 automake
conda install -c conda-forge/label/cf201901 automake
使用自有命令端方式如下,在Anaconda里点击环境-python版本-点击箭头-打开终端,然后输入conda install -c conda-forge automake
其它几个类似方式,也就是在Anaconda的终端上使用以上命令安装,这样就能成功了。他的原理是用这个命令可以直接从自己的云端进行安装已经存好的包。
至此,困扰我很多天的问题终于全部解决。
总结下我这次装各种包中遇到的问题,有几条深刻的教训一定得牢记:
1.根据安装包的版本要求来
这个python-binance-chain直接标明要求python3.6和3.7,那就不要想3.6以下的事,其它地方遇到困难解决其它地方的问题。
secp256k1这个包写明是在linux上3.5及以下,并没有说OS系统3.6以上不行,这个要看清楚
2.安装包方式总结,总共四种,有时候每种方式都需要试下
1)Pycharm安装:设置-项目-编译器-点+号添加-搜索安装
2)Anaconda界面搜索安装:在相应的环境下搜索
3)Anaconda终端搜索安装:在相应的环境下调出终端使用命令:pip install '安装包'
4)Anaconda云端搜索安装:有些包使用前面三种方式都不行,这里可以去https://anaconda.org/搜索包,然后找出命令使用其终端安装,一般是conda install -c conda-forge '安装包'
3.遇到问题多和有经验的人交流
这里问题能解决,得益于在Github上提出问题,然后热心网友给了我很好的思路去解决。