windows vnpy运行过程及问题记录

正确的执行步骤(总结)
前置条件
- Python 版本 :必须使用 Python 3.10
- Python 3.10的更高版本 目前没有
vnpy_ctp的预编译 wheel,需要编译(今天2026.1.31) - 下载地址:https://www.python.org/downloads/windows/
- Python 3.10的更高版本 目前没有
完整安装流程
步骤1:创建 Python 3.10 虚拟环境
powershell
# 创建虚拟环境
py -3.10 -m venv .venv310
# 激活虚拟环境
.\.venv310\Scripts\activate
步骤2:安装核心 vnpy 框架
powershell
# 在虚拟环境中执行安装脚本
.\install.bat
注意 :如果 ta_lib 安装失败(需要编译),可以:
- 先安装预编译的 numpy:
python -m pip install numpy --index-url https://pypi.org/simple - 或者暂时跳过
ta_lib,先完成其他安装
步骤3:安装策略应用模块
powershell
# 使用 VeighNa 的 PyPI 源安装策略模块
python -m pip install -i https://pypi.vnpy.com --trusted-host pypi.vnpy.com vnpy_ctastrategy vnpy_ctabacktester vnpy_sqlite
步骤4:安装 CTP 交易网关
powershell
# 检查是否有预编译 wheel(推荐)
python -m pip install -i https://pypi.vnpy.com --only-binary=:all: --trusted-host pypi.vnpy.com vnpy_ctp
# 如果上面失败(没有 wheel),需要:
# 1. 安装 Visual Studio Build Tools(包含 C++ 编译工具)
# 2. 或者使用 VeighNa Studio(官方定制 Python 发行版)
步骤5:创建启动脚本 run.py
python
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
# 如果安装了 vnpy_ctp,取消下面的注释
# from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
def main():
"""Start VeighNa Trader"""
qapp = create_qapp()
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
# 如果安装了 vnpy_ctp,取消下面的注释
# main_engine.add_gateway(CtpGateway)
main_engine.add_app(CtaStrategyApp)
main_engine.add_app(CtaBacktesterApp)
main_window = MainWindow(main_engine, event_engine)
main_window.showMaximized()
qapp.exec()
if __name__ == "__main__":
main()
步骤6:运行 VeighNa Trader
powershell
# 确保在虚拟环境中
python .\run.py
关键要点
- 必须使用 Python 3.10,不要用 更高版本
- 必须使用虚拟环境,避免依赖冲突
- 使用 VeighNa 的 PyPI 源 :
-i https://pypi.vnpy.com - 如果遇到 SSL 错误 ,添加
--trusted-host pypi.vnpy.com - vnpy_ctp 需要编译或 wheel,如果都没有,考虑使用 VeighNa Studio
📝 详细过程记录(遇到的问题及解决方案)
1. 运行 install.bat 安装ta_lib和vnpy的依赖及其框架
cmd 下
./install.bat
2. 按照README.md中给出的代码创建run.py
Python
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
def main():
"""Start VeighNa Trader"""
qapp = create_qapp()
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
main_engine.add_app(CtaStrategyApp)
main_engine.add_app(CtaBacktesterApp)
main_window = MainWindow(main_engine, event_engine)
main_window.showMaximized()
qapp.exec()
if __name__ == "__main__":
main()
但运行时报如下错误:
PS D:\own\量化\vnpy> python.exe .\run.py
Traceback (most recent call last):
File "D:\own\量化\vnpy\run.py", line 5, in <module>
from vnpy_ctp import CtpGateway
ModuleNotFoundError: No module named 'vnpy_ctp'
原因:vnpy_ctp 不在这个 vnpy 核心仓库里,它是"交易接口网关"插件包,需要单独 pip install。
手动安装 vnpy_ctp
pip install vnpy_ctp
此时,又有报错如下:
PS D:\own\量化\vnpy> pip install vnpy_ctp
WARNING: Ignoring invalid distribution ~ip (C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages)
Collecting vnpy_ctp
Using cached vnpy_ctp-6.7.11.2.tar.gz (12.6 MB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Installing backend dependencies ... done
Preparing metadata (pyproject.toml) ... error
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [20 lines of output]
+ meson setup C:\Users\Administrator\AppData\Local\Temp\pip-install-tvjefcqq\vnpy-ctp_d232ea6b74ec4ceeb2c0f266a65cf01b C:\Users\Administrator\AppData\Local\Temp\pip-install-tvjefcqq\vnpy-ctp_d232ea6b74ec4ceeb2c0f266a65cf01b\.mesonpy-4nwp9ywi -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=C:\Users\Administrator\AppData\Local\Temp\pip-install-tvjefcqq\vnpy-ctp_d232ea6b74ec4ceeb2c0f266a65cf01b\.mesonpy-4nwp9ywi\meson-python-native-file.ini
The Meson build system
Version: 1.10.1
Source dir: C:\Users\Administrator\AppData\Local\Temp\pip-install-tvjefcqq\vnpy-ctp_d232ea6b74ec4ceeb2c0f266a65cf01b
Build dir: C:\Users\Administrator\AppData\Local\Temp\pip-install-tvjefcqq\vnpy-ctp_d232ea6b74ec4ceeb2c0f266a65cf01b\.mesonpy-4nwp9ywi
Build type: native build
WARNING: Failed to activate VS environment: Could not find C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
Project name: vnpy_ctp
Project version: 6.7.11.2
..\meson.build:1:0: ERROR: Unknown compiler(s): [['icl'], ['cl'], ['c++'], ['g++'], ['clang++'], ['clang-cl']]
The following exception(s) were encountered:
Running `icl ""` gave "[WinError 2] 系统找不到指定的文件。"
Running `cl /?` gave "[WinError 2] 系统找不到指定的文件。"
Running `c++ --version` gave "[WinError 2] 系统找不到指定的文件。"
Running `g++ --version` gave "[WinError 2] 系统找不到指定的文件。"
Running `clang++ --version` gave "[WinError 2] 系统找不到指定的文件。"
Running `clang-cl /?` gave "[WinError 2] 系统找不到指定的文件。"
A full log can be found at C:\Users\Administrator\AppData\Local\Temp\pip-install-tvjefcqq\vnpy-ctp_d232ea6b74ec4ceeb2c0f266a65cf01b\.mesonpy-4nwp9ywi\meson-logs\meson-log.txt
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> vnpy_ctp
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
原因:
执行 pip install vnpy_ctp 时,pip 没有拿到可直接安装的预编译 wheel,而是拿到了源码包:
Using cached vnpy_ctp-6.7.11.2.tar.gz
于是 pip 走"从源码编译安装"的流程(日志里出现了 meson setup),但系统里 没有可用的 C/C++ 编译器工具链,所以 Meson 找不到任何编译器:
找不到 VS 环境:Could not find ...vswhere.exe
找不到编译器:Unknown compiler(s): ... ['cl'] ...(MSVC 的 cl.exe 不存在/不在环境里)
因此失败点就是:vnpy_ctp 需要编译(或需要 wheel),环境缺编译器
我现在用的python是3.12版本的,vnpy_ctp没有3.12版本的wheel,改为3.10版本的python
从连接[https://www.python.org/downloads/windows/\]中下载3.10的python并安装
创建3.10版本的虚拟环境
py -3.10 -m venv .venv310
.\.venv310\Scripts\activate
在3.10环境下,重新安装vnpy的依赖和框架:
执行
./install.bat
执行如下命令安装vnpy_ctp
pip install -i https://pypi.vnpy.com --only-binary=:all: vnpy_ctp
继续安装其他的依赖
python -m pip install -i https://pypi.vnpy.com --trusted-host pypi.vnpy.com vnpy_ctastrategy vnpy_ctabacktester vnpy_sqlite