本机环境:ubuntu18,anaconda4.3
之前使用米框的rqalpha进行开发,由于其无法实盘,故想改用vnpy。然后就发现了,安装的时候可有无限的坑。这里整理了完整安装+踩坑流程,之所以记录踩坑,有些问题相对小众,不大容易搜到,后面有人遇到类似情况,可以及时迷途知返。
首先对于旧版版本v1.9之前的和新版v2.0,旧版在python2.7上,新版在python3.7上,python3.5不行,特殊注意下
(坑)按照官方教程:https://github.com/vnpy/vnpy/wiki/Ubuntu%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85
但是这个教程实际是V1.9的教程,V2.0并不适用,但文中根本没提到这一点(其实2.0比这个简单,所以按这个安装理论上也是没问题的,不过中间遇到的坑需要一个个踩)
那么2.0版本的教程呢?
这里:https://github.com/vnpy/vnpy_lab/blob/master/cpp_api_binding/doc/build.linux.md
笔者是先安装的1.9,后来发现坑太多,转安装2.0,2.0眼看最后一步了,有个问题没找到处理方案,丢到了论坛中了,在回头安装1.9.最终结果1.9安装成功了。2.0暂时放着,后续有时间了在研究,安装好后在补充博客。
vnpy安装的最大感受是,注意python版本,之前安装的大部分开源程序,名义上基于python2.x,3.x实际上2.x的都可基于2.7安装,3.x的都可基于3.5安装。一般来说问题不大,基本兼容的。但是vnpy必须严格遵守版本要求。v1.9对应python2.7,v2.0对应python3.7,尤其是v2.0这个基于python3.5会有非常多的问题,而且解决方案比较难找。还有一点就是基于anaconda的话最好使用全新的版本(v2.0的安装尤其需要如此),作者本机原来是稍旧版的anaconda,并不支持python3.7,后来通过conda 升级anaconda,然后使得其支持python3.7,但是基于此创建的虚拟环境,很多pip安装的包执行起来是混乱的,感觉上并没有和系统环境完全隔离开。最后重装了最新的anaconda后,新版anaconda创建的pyton3.7环境基本就没问题的。
尝试第五次安装(这次成功之前,经历过四次失败!!!),目标v1.9
主要参考:https://github.com/vnpy/vnpy/wiki/Ubuntu%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85s
1,创建conda环境
conda create -n vnpy27 python=2.7
source activate vnpy27
2,env下安装
pip install future
3,切换到系统下面安装(非env环境)(系统默认其实也是ana的环境,是ana就ana吧,懒癌晚期,摸索过一遍的东西绝对不摸索第二遍)
sudo apt-get install git
sudo apt-get install mongodb
sudo apt-get install libboost-all-dev
sudo apt-get install cmake
sudo apt-get install libsnappy-dev
sudo apt-get install python-snappy
4,系统环境下安装
sudo apt-get install build-essential
sudo apt-get install python-dev
5,env下安装
source activate vnpy27
长期支持版git地址:https://github.com/vnpy/vnpy/tree/v1.9.2-LTS
切换到自己之前的git clone项目中,切换分之即可
cd ~/PYTHON/vnpy
git checkout v1.9.2-LTS
--是否安装CTP接口,yes
--有几个输入错了,输了大写Y,貌似认为n了
重新安装下,全部回车(y)
报错:
File "build/bdist.linux-x86_64/egg/vnpy/api/rest/rest_client.py", line 28
method: str,
暂不理会
cd ~/PYTHON/vnpy/examples/VnTrader
python run.py
报错:
File "/home/john/anaconda3/envs/vnpy27/lib/python2.7/site-packages/vnpy-1.9.2-py2.7.egg/vnpy/event/eventEngine.py", line 11, in
from qtpy.QtCore import QTimer
File "/home/john/anaconda3/envs/vnpy27/lib/python2.7/site-packages/qtpy/__init__.py", line 208, in
raise PythonQtError('No Qt bindings could be found')
qtpy.PythonQtError: No Qt bindings could be found
进入python窗口,import qtpy确实无法import
可能原因:由于在ananconda中安装,所以部分系统自带的包,无法使用(或版本不对),可能需要独立安装下
参考教程中的安装pyqt4,部分
ana环境中执行:
sudo apt-get install qt4-dev-tools
sudo apt-get install libqwt5-qt4 libqwt5-qt4-dev
之前自己已下载的
cd ~/下载/sip-4.19.8
sudo python configure.py
sudo make install
cd ~/下载/PyQt4_gpl_x11-4.12.1
sudo python configure-ng.py
sudo make
sudo make install
依然不行。
百度下报错提示:qtpy.PythonQtError: No Qt bindings could be found
参考:https://github.com/spyder-ide/spyder/issues/3545
执行:
pip uninstall spyder
pip install spyder==3.2.1
报错:pylint requires Python '>=3.4.*' but the running Python is 2.7.11
忽略,不使用这种解决方式,继续尝试其他解决方法
参考:https://github.com/spyder-ide/spyder/issues/4078
执行:conda install pyqt
执行python
import qtpy
成功!
cd ~/PYTHON/vnpy/examples/VnTrader
python run.py
报错:
File "/home/john/anaconda3/envs/vnpy27/lib/python2.7/site-packages/vnpy-1.9.2-py2.7.egg/vnpy/api/rest/RestClient.py", line 11, in
from enum import Enum
ImportError: No module named enum
pip install enum
成功!
cd ~/PYTHON/vnpy/examples/VnTrader
python run.py
报错:
File "/home/john/anaconda3/envs/vnpy27/lib/python2.7/site-packages/vnpy-1.9.2-py2.7.egg/vnpy/api/rest/RestClient.py", line 12, in
from typing import Any, Callable, Optional
ImportError: No module named typing
pip install typing
成功
cd ~/PYTHON/vnpy/examples/VnTrader
python run.py
报错:
File "/home/john/anaconda3/envs/vnpy27/lib/python2.7/site-packages/vnpy-1.9.2-py2.7.egg/vnpy/api/xtp/__init__.py", line 4, in
from .vnxtpquote import QuoteApi
ImportError: libsodium.so.18: cannot open shared object file: No such file or directory
参考:https://mrxn.net/Linux/541.html
执行:
find / -name "libsodium.so.18" 2>/dev/null
sudo ln -sf /home/john/anaconda3/pkgs/libsodium-1.0.10-0/lib/libsodium.so.18 /usr/lib/libsodium.so.18
sudo ldconfig
python run.py
依然是同样的报错:
File "/home/john/anaconda3/envs/vnpy27/lib/python2.7/site-packages/vnpy-1.9.2-py2.7.egg/vnpy/api/xtp/__init__.py", line 4, in
from .vnxtpquote import QuoteApi
ImportError: libsodium.so.18: cannot open shared object file: No such file or directory
参考:https://blog.csdn.net/baidu_27518829/article/details/88383775
执行:
conda install -c conda-forge libsodium
python run.py
依然是同样的报错。
参考:https://github.com/vnpy/vnpy/issues/1364
执行:
sudo apt-get install libsodium-dev
cd /home/john/PYTHON/vnpy/vnpy/api/xtp
bash build.sh
python run.py
依然是同样的报错。
参考:同上
执行:
sudo gedit run.py
注释掉加载xtpGateway的代码
python run.py
报错:
File "/home/john/anaconda3/envs/vnpy27/lib/python2.7/site-packages/vnpy-1.9.2-py2.7.egg/vnpy/rpc/vnrpc.py", line 7, in
import zmq
ImportError: No module named zmq
执行:pip install zmq
python run.py
报错:
File "run.py", line 65, in main
me.addGateway(xtpGateway)
NameError: global name 'xtpGateway' is not defined
执行:sudo gedit run.py
有个地方漏掉了,没注释干净
python run.py
启动起来了,但是没有行情,有账户信息没有配置