第二章:环境准备——Python环境、Web3.py、CCXT库安装与配置
说实话,很多做交易的朋友一开始就急着写策略,结果环境没配好,折腾半天连数据都拉不下来。我见过太多人卡在这一步了。今天咱们就把地基打牢,后面写代码才能顺风顺水。
2.1 Python环境搭建
我个人习惯用 Python 3.9 以上版本。为什么?因为 Web3.py 和 CCXT 对新版本支持更好,而且一些新语法写起来确实爽。
第一步:安装 Python
去官网下载安装包,记得勾选「Add Python to PATH」。这个选项不勾,后面命令行里敲 python 会报错。我刚开始学的时候就吃过这个亏,折腾了半小时才发现。
第二步:创建虚拟环境
虚拟环境这东西,说白了就是给你的项目建一个独立的小房间。不同项目用不同版本的库,互不干扰。
# 创建虚拟环境
python -m venv crypto_env
# 激活虚拟环境(Windows)
crypto_env\Scripts\activate
# 激活虚拟环境(Mac/Linux)
source crypto_env/bin/activate
看到命令行前面多了个 (crypto_env) 就说明激活成功了。嗯,这里要注意,每次打开终端都要重新激活一下。
2.2 安装 Web3.py——链上数据的眼睛
Web3.py 是连接以太坊区块链的桥梁。你想查链上数据,比如某个地址的余额、某笔交易的详情,都得靠它。
pip install web3
就这么简单?对,但有个坑——国内网络有时候下载慢。我曾经在项目里等安装等了十分钟没反应,后来发现是网络问题。
pip install web3 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,咱们测试一下能不能连上以太坊节点:
from web3 import Web3
# 连接公共节点(Infura 需要注册获取 URL)
infura_url = "https://mainnet.infura.io/v3/YOUR_PROJECT_ID"
w3 = Web3(Web3.HTTPProvider(infura_url))
# 检查是否连接成功
print(w3.is_connected()) # 返回 True 就对了
如果返回 False,别慌。检查一下你的网络能不能访问外网,或者换个节点试试。我个人习惯用 Alchemy,稳定性比 Infura 好一些。
2.3 安装 CCXT——交易所的万能遥控器
CCXT 这个库,说白了就是统一了上百家交易所的 API。你写一套代码,就能在币安、OKX、Bybit 等交易所同时交易。是不是很爽?
pip install ccxt
安装完测试一下:
import ccxt
# 创建币安交易所对象
exchange = ccxt.binance()
# 获取 BTC/USDT 的当前价格
ticker = exchange.fetch_ticker('BTC/USDT')
print(f"BTC 当前价格: {ticker['last']} USDT")
能打印出价格,说明环境配好了。这里有个细节——CCXT 默认用的是交易所的公共 API,不需要 API Key 也能拉行情数据。但如果你想下单交易,那就得配置 API Key 了。
2.4 配置 API Key(交易必备)
如果你只是看数据,这步可以跳过。但要做实盘交易,必须配置。
步骤:
- 登录交易所,进入 API 管理页面
- 创建一个新 API,权限勾选「交易」和「读取」
- 把 API Key 和 Secret 保存到本地文件(千万别截图发群里)
import ccxt
import os
# 从环境变量读取 Key(推荐方式)
exchange = ccxt.binance({
'apiKey': os.getenv('BINANCE_API_KEY'),
'secret': os.getenv('BINANCE_SECRET_KEY'),
})
# 测试连接
balance = exchange.fetch_balance()
print(balance['total']['USDT']) # 查看 USDT 余额
为什么用环境变量?因为这样即使代码被别人看到,你的 Key 也是安全的。我在生产环境里一直这么用,从来没出过问题。
2.5 知识体系总览
下面这张图帮你理清今天装的所有东西之间的关系:
2.6 常见问题与避坑指南
问题1:安装 Web3.py 时报错
我曾经在 Windows 上遇到一个坑——缺少 Microsoft C++ Build Tools。解决办法很简单,去微软官网下载安装一下就行。
问题2:CCXT 获取数据报错
有时候交易所会限制请求频率。比如币安,1秒内请求超过 20 次就会被封 IP。CCXT 自带限流功能,记得开启:
exchange = ccxt.binance({
'enableRateLimit': True, # 开启限流
})
问题3:连接以太坊节点超时
公共节点有时候不稳定。我建议准备两个备用节点,一个不行就换另一个。代码里可以这样写:
providers = [
"https://mainnet.infura.io/v3/YOUR_KEY",
"https://eth-mainnet.alchemyapi.io/v2/YOUR_KEY",
]
for url in providers:
w3 = Web3(Web3.HTTPProvider(url))
if w3.is_connected():
print(f"连接成功: {url}")
break
核心要点回顾:
- Python 3.9+ + 虚拟环境,这是基础
- Web3.py 负责链上数据,连接节点要稳定
- CCXT 负责交易所数据,API Key 要保密
- 限流、备用节点、环境变量——这三个习惯能帮你省很多事
好了,环境准备就到这里。代码都跑通了吧?如果卡住了,回头检查一下网络和版本。下一章咱们就开始拉真正的链上数据了,到时候你会觉得今天配环境花的功夫都值了。