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