VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 14
声望: 1

如题,尝试了pip install vnpy_ctp之后又报错无法from vnpy_ctp import CtpGateway
请问下有没有遇到这种情况的朋友

Member
avatar
加入于:
帖子: 337
声望: 26

请用pip list看一下是否安装成功,如果安装成功后需要再重启一下试试。

Member
avatar
加入于:
帖子: 14
声望: 1

青青子荆 wrote:

请用pip list看一下是否安装成功,如果安装成功后需要再重启一下试试。

安装成功了,但是仍然报错,报错信息是
ImportError: cannot import name 'CtpGateway' from 'vnpy_ctp'

Member
avatar
加入于:
帖子: 337
声望: 26

可以看一下vnpy_ctp下面有没有CtpGateway文件,如果有的话,请确认一下有没有文件命名重复或者路径问题。

Member
avatar
加入于:
帖子: 14
声望: 1

青青子荆 wrote:

可以看一下vnpy_ctp下面有没有CtpGateway文件,如果有的话,请确认一下有没有文件命名重复或者路径问题。

后面还是没解决 不过非常感谢您的回答!

Member
avatar
加入于:
帖子: 337
声望: 26

请试一下原来的语句 即from vnpy.gateway import ctp
如果还是不行的话应该是python环境配置问题

Member
avatar
加入于:
帖子: 3
声望: 0

python环境配置大概是什么问题?
Terry_wtx wrote:

青青子荆 wrote:

可以看一下vnpy_ctp下面有没有CtpGateway文件,如果有的话,请确认一下有没有文件命名重复或者路径问题。

后面还是没解决 不过非常感谢您的回答!

Member
avatar
加入于:
帖子: 3593
声望: 234

就是用错了对应的python环境

Member
avatar
加入于:
帖子: 3
声望: 0

我把之前的python都卸载后,只留了一个anaconda,python3.8。但是还是一样的报错....

Member
avatar
加入于:
帖子: 3593
声望: 234

那你还是有两个python呀,一个anaconda带的,一个下载vnpy带的

Member
avatar
加入于:
帖子: 1
声望: 0

不知道楼主有没有解决,我也是遇到同样的问题。

Member
avatar
加入于:
帖子: 3593
声望: 234

如果下载的是完整的,然后也是报importerror,并且有多个python的话,请检查一下自己的环境配置

Member
加入于:
帖子: 5
声望: 0

遇到同样的问题,求解答
ImportError: cannot import name 'CtpGateway' from 'vnpy_ctp' (C:\Users\hu\AppData\Local\Programs\Python\Python38\lib\site-packages\vnpy_ctp__init__.py)
除了CTP,其他接口可以连接,应该不是环境配置的问题

Member
avatar
加入于:
帖子: 3593
声望: 234

那么请升级一下vnpy_ctp看看

Member
avatar
加入于:
帖子: 1
声望: 1

linux 上,anacondapython3.7 环境中,从源码安装时遇到了类似的问题,目前已解决,在此记录一下,希望能有所帮助。
问题原因猜测
CTP API 动态链接库 libthostmduserapi_se.so 和 libthosttraderapi_se.so 对另外两个动态链接库 libstdc++.so.6 和 libgcc_s.so.1 的依赖与在 anaconda 环境中安装 vnpy_ctp 时编译生成的 vnctpmd.cpython-37m-x86_64-linux-gnu.so 和 vnctptd.cpython-37m-x86_64-linux-gnu.so 对 libstdc++.so.6 和 libgcc_s.so.1 的依赖出现差别。
CTP API 的两个动态链接库依赖的是系统自带的 /usr/lib 目录下的 libstdc++.so.6 和 libgcc_s.so.1 ,而安装 vnpy_ctp 时编译生成的两个动态链接库依赖的却是你安装时所在的 anaconda 环境目录中的 lib 目录中的 libstdc++.so.6 和 libgcc_s.so.1 。
可以使用 ldd 命令查看那些动态链接库是否属于这种情况,那四个动态链接库都在 vnpy_ctp 安装目录中的 api 目录下。
如果确实属于这种情况,可尝试如下解决

  1. 删除原来的 anaconda 环境:conda remove -n 环境名 --all
  2. 新建一个带有 python3.7 的 anaconda 环境:conda create -n 环境名 python=3.7
  3. 切换到新环境所在目录中的 lib 目录下:cd anaconda或miniconda安装目录/envs/环境名/lib
  4. 删除该目录下以 libstdc++.so 和 libgcc_s.so 开头的文件:rm -f libstdc++.so* libgcc_s.so*
  5. 在新环境中安装 vnpy

经过第 4 步,在新环境中,无论在安装过程中编译链接什么,用到的都是系统自带的(/usr/lib/) libstdc++.so.6 和 libgccs.so.1,避免了出现对它俩依赖不一致的情况。
BTW,也许有另一种解法,就是直接修改 CTP API 动态链接库,让它们使用 anaconda 环境目录中 lib 目录下的依赖,但它们是闭源的,直接以二进制文件形式发布,不晓得要怎么改〒

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】