Python 开发者想在 Solana 上搭东西的话,生态可用但比 TypeScript 不那么成熟。两个主要库(solana-py 和 solders)覆盖你要的大部分;模式跟 web3.js 知道之后是相似的。
这是 Python 上 Solana 开发的实操指南:库、模式、坑、什么时候 Python 是合适选择、什么时候该换成 TypeScript 或 Rust。
Python Solana 生态
两个主要库:
solana-py。 长存的 Python Solana SDK。提供 Connection 风格的类、交易构建、RPC 方法包装。成熟,但比 JS 生态走得慢。
solders。 较新、Rust 后端的 Python 绑定,提供低级类型(Pubkey、Keypair、Signature),性能比纯 Python 等同强很多。经常跟 solana-py 一起用。
现代 Python Solana 代码典型两个都用:solders 给类型、solana-py 给更高级的 RPC 交互。
安装
pip install solana solders
或 poetry / uv。两个 PyPI 上支持都好。
基础 RPC 连接
Python 模式:
from solana.rpc.api import Client
from solders.keypair import Keypair
from solders.pubkey import Pubkey
# 连 RPC
client = Client("https://your-rpc-url.example/?api-key=...")
# 生成或加载 keypair
sender = Keypair() # 或 Keypair.from_bytes(...)
# 查余额
balance = client.get_balance(sender.pubkey())
print(balance.value) # Lamports
用过 web3.js 的话形态熟悉。库藏起 JSON-RPC 细节。
发交易
from solders.message import Message
from solders.transaction import Transaction
from solders.system_program import TransferParams, transfer
from solana.rpc.types import TxOpts
ix = transfer(TransferParams(
from_pubkey=sender.pubkey(),
to_pubkey=recipient.pubkey(),
lamports=1_000_000,
))
recent_blockhash = client.get_latest_blockhash().value.blockhash
# 用 solders 构建并签名交易
msg = Message.new_with_blockhash([ix], sender.pubkey(), recent_blockhash)
tx = Transaction([sender], msg, recent_blockhash)
result = client.send_transaction(
tx,
opts=TxOpts(skip_preflight=True, max_retries=0),
)
print(result.value) # Signature
模式跟 web3.js 相似,带 Python 习惯。
Python 特定要考虑的
异步 vs 同步。 solana-py 有同步(Client)和异步(AsyncClient)两个变体。高量代码用异步。脚本同步行。
类型 stub。 不错但不完美。一些方法没完整类型提示。准备偶尔 # type: ignore。
性能。 纯 Python 一些操作比 JS 慢。重要地方(签名、反序列化)solders 提供 Rust 后端实现关差距。
库版本。 solana-py 和 solders 半独立移动。看兼容问题;生产固定版本。
Python 什么时候适合 Solana
Python 是合适选择的场景:
- 你已经在 Python 生态里。 ML 管道、数据工程、现有 Python 服务。
- Python 重栈的后端交易机器人。 一些量化店 Python 优先。
- 研究和分析。 Pandas + Python 分析生态给回测和数据分析好。
- 快原型。 Python 迭代速度比 Rust 探索好。
Python 不合适的场景:
- 搭 dApp 前端。 用 TypeScript(浏览器不好跑 Python)。
- 写 Solana 程序。 只 Rust。
- 亚毫秒延迟要求。 用 Rust。
- 你没 Python 专业。 TypeScript 在 Solana 上更熟。
常见 Python Solana 模式
异步批量 RPC 调用:
import asyncio
from solana.rpc.async_api import AsyncClient
async def fetch_many(client, pubkeys):
tasks = [client.get_account_info(pk) for pk in pubkeys]
return await asyncio.gather(*tasks)
async with AsyncClient("https://your-rpc.example") as client:
results = await fetch_many(client, [key1, key2, key3])
要更好性能,合适地方偏好 getMultipleAccountsInfo(一个 round-trip)。
版本化交易签名:
from solders.message import MessageV0
from solders.transaction import VersionedTransaction
msg = MessageV0.try_compile(
payer=signer.pubkey(),
instructions=[your_instruction],
address_lookup_table_accounts=[],
recent_blockhash=blockhash,
)
tx = VersionedTransaction(msg, [signer])
版本化交易支持比 legacy 交易更多账户;很多 Jupiter 路由要。
常见 Python 错误
异步自然的代码用同步客户端。 做很多并发操作的话,异步明显更好。
不固定库版本。 solana-py 和 solders 在演化;生产代码该固定。
低效构建交易。 朴素 Python 签名慢;用 solders 后端类型。
忘处理 RPC 错误。 网络错误、限流、交易失败。搭防御性代码。
当成全类型代码。 类型提示是部分的。别盲信;测。
Python 里的交易机器人
Python 给一些交易机器人风格合理:
策略/研究机器人。 Pandas 驱动的回测、状态检测、信号生成。Python 出彩。
中频执行机器人。 亚秒级可达。亚 100ms 难;考虑热路径 Rust 配 Python 编排。
交易系统后端服务。 API 服务器、监控、仪表板。Python 行。
亚 100ms 或 HFT,热路径用 Rust 写、Python 编排。
这周可以做什么
开始 Python Solana:
- 装
solana-py和solders。 都要。 - 任何生产代码设
AsyncClient。 同步给快脚本。 - RPC URL 用环境变量。 跟其他地方做法一样。
- 搭每笔签名级别遥测。 任何语言都一样有价值。
- 交易机器人,提前规划 Rust 逃生口。 等你后面要更多速度时,你会想把热路径迁到 Rust。
- 固定库版本。 生产里不可选。
从 Python 试一下 BoltTx
from solana.rpc.api import Client
from solana.rpc.types import TxOpts
client = Client("https://bolttx.io/?api-key=YOUR_API_KEY")
# ... 构建你的交易 ...
result = client.send_transaction(
tx,
opts=TxOpts(skip_preflight=True, max_retries=0),
)
免费档注册。从 Python 工作跟从其他语言一样。
常见问题
solana-py 还在维护吗?
在,虽然比 JS 生态走得慢。GitHub 上看更新。
anchorpy 怎么样?
anchorpy 给 Python 提供 Anchor 风格的客户端生成。从 Python 调 Anchor 程序有用。
能用 Python 写 Solana 程序吗? 不能。程序是 Rust。Python 只给客户端代码。
跟 TypeScript 性能差别?
RPC 受限的工作、相似。CPU 受限的工作(签名、序列化),Python 配 solders 有竞争力;没它就更慢。
solana-py 和 solders 哪个更好?
两个都用。solders 给低级类型(更快);solana-py 给高级 RPC 交互。