升级到 3.12 之后(升级流程与取舍见上一篇),很多人的第一个疑问不是”怎么升”,而是”我这段代码到底跑在哪个 Python 里”。
这个问题在 3.6 时代几乎不用想:QMT 只有一个内置解释器,装什么库、报什么错,都在同一个篮子里。现在有了第二套环境,同一个 import pandas 在两边拿到的是差了八年的两个东西。所以这篇不讲怎么升级,讲结构——QMT 客户端目录里到底放了什么,import 时按什么顺序找,装包该落到哪个目录。
先交代数据来源:以下目录与文件来自我本机xx证券 QMT 交易端的实际扫描(2026-10-27)。不同券商的路径基本同构,但版本号、文件名可能不一样。
一、先看一张图
1 | <安装目录>\bin.x64\ |
一句话记住:3.6 摊在 bin.x64\** **根部,3.12 缩在** **bin.x64\python312\ 里。 两套各有自己的解释器、标准库、第三方库,互不共享。
这也解释了一个常见困惑:为什么升级之后,之前装的库”不见了”。不是丢了,是你换到了另一个 site-packages,那边没装过。
二、Lib\ 根下和 site-packages\ 里,是两种东西
打开 bin.x64\Lib\,json.py、os.py、csv.py 直接躺在根下,而 numpy、pandas 全在 site-packages\ 子目录里。这个划分不是 QMT 定的,是 Python 的固定约定。
| 标准库 | 第三方库 | |
|---|---|---|
| 位置 | Lib\ 根下 |
Lib\site-packages\ |
| 来源 | 随解释器发行包自带,不是装的 | pip 安装,或官方库包解压 |
| 版本 | 与解释器绑定,永远是 3.6 版标准库 | 各自独立(pandas 0.22 配 numpy 1.19,各管各的) |
| 能不能单独升级 | 不能,只随 Python 版本走 | 能,pip 随时装、升、卸 |
| 例子 | json、os、csv、asyncio、sqlite3、ctypes |
numpy、pandas、sklearn、xtquant |
为什么第三方库必须放 site-packages? 三个原因叠在一起:
- 发现机制——解释器启动时,内置的
site模块会专门扫描这个目录并把它加进sys.path。标准库的路径是硬编码在解释器里的,第三方库靠site模块发现。放错位置,import就是找不到,不是”可能有问题”,是确定找不到。 - pip 的默认落点——pip 装任何包,都默认装进当前环境的
site-packages。你不需要指定,但也不能乱放。 - 职责分离——标准库跟着 Python 版本走,第三方库独立管理,升级互不干扰。
三、两套环境的组件对照
| 组件 | Python 3.6 | Python 3.12 |
|---|---|---|
| 解释器 | python36.dll + pythonw.exe |
python312\python.exe + python312.dll |
| 桥接 DLL | PythonFormula36.dll |
PythonFormula312.dll |
| 标准库 | bin.x64\Lib\(另有 python36.zip 备份) |
bin.x64\python312\Lib\ |
| 第三方库 | bin.x64\Lib\site-packages\ |
bin.x64\python312\Lib\site-packages\ |
| 默认状态 | 默认使用 | 需在策略设置里显式选择 |
四、三个容易误解的地方
1. python36.zip 不是垃圾,别删。 它和解压出来的 Lib\ 内容相同,是备份。Python 优先用解压目录,zip 只是兜底。删了通常没事,但省不下多少空间,没必要动。
2. .pyd 文件两边不通用。 你会在两套环境里看到同一个 xtquant 250807.1.2,版本号一模一样,但二进制不能互相复制。.pyd 是按 Python 版本编译的(cp36-win_amd64 vs cp312-win_amd64),贴过去就是 ImportError: Module use of python36.dll conflicts。这是升级时最容易犯的错:看到版本一样,就想把整个 site-packages 拷过去图省事。
3. python312\python.exe 能单独跑,但不是策略环境。 它是个完整的解释器,你可以用它调试 xtquant 的连接、跑个小脚本验证库版本。但它不会自动带上 QMT 策略的环境变量与上下文——ContextInfo、行情回调这些东西,还是得在 QMT 界面里跑策略才有。
免责声明
- 本文为编程技术研究内容,不构成任何投资建议、荐股意见或收益承诺。
- 目录结构、文件名与版本号来自本人本机某券商客户端的实际扫描,不同券商、不同客户端版本的布局可能不同,请以自己的安装目录为准。
- 修改客户端目录、拷贝库文件、删除文件前请先备份;因误操作导致的客户端异常、数据丢失由操作者自行承担。
- 实盘策略上线前必须在 QMT「模拟信号模式」或「模拟柜台」充分测试。
- 涉及账号、账号 key、委托号等敏感信息的日志不得对外分享。
- 本文内容按”现状”提供,不保证适用于所有客户端版本。