2. 开发环境搭建:Python 3.10+ 环境配置、Docker部署图数据库、安装依赖库(py2neo, pandas, fastapi)、IDE配置与调试
说实话,很多做金融图计算的项目,最后翻车都不是因为算法多难,而是环境没搭好。我见过太多人花了两周调代码,结果发现是图数据库版本不对——这种坑,咱们今天一次性填平。
这一章,我会带你从零开始,把开发环境整得明明白白。咱们的目标是:一次配置,到处运行。
2.1 Python 3.10+ 环境配置
我个人习惯用 pyenv 管理 Python 版本。为什么?因为项目多了你就知道,不同项目依赖的 Python 版本可能不一样。金融项目尤其如此——有些老项目还在用 3.7,新项目已经上 3.12 了。
先检查你当前 Python 版本:
python --version
# 如果低于 3.10,建议升级
我推荐用 conda 创建虚拟环境,干净又隔离:
conda create -n fintech_graph python=3.10
conda activate fintech_graph
fintech_graph。别用中文,也别用空格,否则后面 pip 安装时会出一些莫名其妙的错。
为什么要 Python 3.10+?因为 3.10 引入了 match-case 语法,写图遍历逻辑时特别顺手。另外,py2neo 的最新版本也要求 3.8+,但 3.10 更稳妥。
2.2 Docker 部署图数据库
图数据库这块,我选 Neo4j。为什么?金融场景下,关系型数据库处理多层关联查询时性能会急剧下降,而 Neo4j 天生就是干这个的。
用 Docker 部署,说白了就是拉个镜像、跑个容器。但这里有个坑——数据持久化。我曾经在测试环境忘了挂载数据卷,结果容器一重启,所有图数据全没了。嗯,那感觉就像写了一天代码没保存。
正确的做法:
docker run \
--name neo4j-finance \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/password123 \
-v /data/neo4j:/data \
-d neo4j:5-community
解释一下几个关键点:
- 7474 端口:Neo4j 的浏览器管理界面,你可以用
http://localhost:7474访问 - 7687 端口:Bolt 协议端口,Python 代码通过它连接数据库
- -v 挂载卷:把容器内的
/data映射到宿主机,数据就不会丢了 - 5-community:我选社区版,功能完全够用。企业版要钱,而且金融场景下社区版的安全性已经达标
password123 这种弱口令。金融项目上线前,密码策略一定要合规。我见过有人把生产环境的 Neo4j 密码写在代码里,结果被安全扫描扫出来——那场面,相当尴尬。
启动后,访问 http://localhost:7474,用 neo4j/password123 登录。你会看到一个 Cypher 查询界面。先跑一句测试:
RETURN "Hello, FinTech Graph!";
看到返回结果,说明 Neo4j 跑起来了。
2.3 安装依赖库
依赖库这块,我习惯用 requirements.txt 管理。为什么?因为金融项目通常需要多人协作,你总不能让大家一个个手动装吧?
核心依赖就三个:
| 库名 | 版本 | 用途 |
|---|---|---|
| py2neo | 2021.2.3 | Python 操作 Neo4j 的官方库 |
| pandas | 2.0+ | 数据处理,尤其是金融时间序列 |
| fastapi | 0.104+ | 构建 RESTful API,供前端调用 |
安装命令:
pip install py2neo pandas fastapi uvicorn
这里我多说一句 py2neo。这个库的 API 设计很优雅,但有个小坑——事务管理。我曾经在批量插入图数据时,忘了用 graph.begin() 开启事务,结果插入到一半网络断了,数据状态变得乱七八糟。正确的做法:
from py2neo import Graph, Node, Relationship
graph = Graph("bolt://localhost:7687", auth=("neo4j", "password123"))
# 开启事务
tx = graph.begin()
# 创建节点
a = Node("Person", name="Alice")
b = Node("Person", name="Bob")
tx.create(a)
tx.create(b)
# 创建关系
ab = Relationship(a, "KNOWS", b)
tx.create(ab)
# 提交事务
tx.commit()
你看,用事务包裹起来,要么全部成功,要么全部回滚。金融数据最怕的就是「半拉子」状态。
2.4 IDE 配置与调试
IDE 我推荐 VS Code 或者 PyCharm。我个人更倾向 VS Code,因为轻量、插件生态好。但如果你做大型金融项目,PyCharm 的调试功能确实更强。
VS Code 需要装的插件:
- Python:微软官方,必装
- Pylance:类型检查,写代码时能提前发现类型错误
- Jupyter:金融分析经常需要交互式探索,Jupyter 插件很方便
- Neo4j:直接在 VS Code 里写 Cypher 查询,语法高亮
调试配置这块,我踩过一个坑——环境变量。金融项目通常有多个环境(开发、测试、生产),数据库连接地址不一样。我习惯用 .env 文件管理:
# .env 文件
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=password123
然后在代码里用 python-dotenv 加载:
from dotenv import load_dotenv
import os
load_dotenv()
uri = os.getenv("NEO4J_URI")
user = os.getenv("NEO4J_USER")
password = os.getenv("NEO4J_PASSWORD")
这样,不同环境只需要改 .env 文件,代码完全不用动。我曾经在项目上线时,就是因为忘了改数据库地址,导致测试数据污染了生产环境——那教训,够我记一辈子。
- Python 3.10+ 用 conda 创建虚拟环境,隔离干净
- Docker 部署 Neo4j 时,务必挂载数据卷
- py2neo 操作图数据库,记得用事务
- IDE 配置好环境变量管理,避免环境切换出错
好了,环境搭好了。下一章咱们就开始写真正的图计算代码——从金融数据建模开始。你想想看,当你能用 Cypher 查询出「谁和谁之间有资金往来」时,那种感觉还是挺爽的。
公众号:蓝海资料掘金营,微信deep3321