py-geth: 以子进程运行Go-Ethereum
项目描述
py-geth
Python包装程序,用于作为子进程运行geth
系统依赖
此库需要存在geth
可执行文件。
如果管理自己的geth捆绑版本,请使用
GETH_BINARY
环境变量设置二进制文件的路径。
安装
安装
python -m pip install py-geth
快速入门
要运行连接到主网的geth
>>> from geth import MainnetGethProcess
>>> geth = MainnetGethProcess()
>>> geth.start()
或以开发模式进行测试。这些需要你为它们提供一个名称。
>>> from geth import DevGethProcess
>>> geth = DevGethProcess('testing')
>>> geth.start()
默认情况下,DevGethProcess
在geth默认的datadir
中设置测试链。如果你想更改这些测试链的位置,可以指定一个替代的base_dir
。
>>> geth = DevGethProcess('testing', '/tmp/some-other-base-dir/')
>>> geth.start()
每个实例都有一些方便的属性。
>>> geth.data_dir
"~/.ethereum"
>>> geth.rpc_port
8545
>>> geth.ipc_path
"~/.ethereum/geth.ipc"
>>> geth.accounts
['0xd3cda913deb6f67967b99d67acdfa1712c293601']
>>> geth.is_alive
False
>>> geth.is_running
False
>>> geth.is_stopped
False
>>> geth.start()
>>> geth.is_alive
True # indicates that the subprocess hasn't exited
>>> geth.is_running
True # indicates that `start()` has been called (but `stop()` hasn't)
>>> geth.is_stopped
False
>>> geth.stop()
>>> geth.is_alive
False
>>> geth.is_running
False
>>> geth.is_stopped
True
在测试时,可以看到由geth
进程产生的日志输出。`py-geth`提供了一个混合类,可以用于将stdout和stderr输出记录到日志文件。
>>> from geth import LoggingMixin, DevGethProcess
>>> class MyGeth(LoggingMixin, DevGethProcess):
... pass
>>> geth = MyGeth()
>>> geth.start()
所有日志都将写入当前目录下`./logs/`的日志文件中。
底层geth
进程可能需要额外的时间来打开RPC或IPC连接。您可以使用以下接口查询这些是否已准备好。
>>> geth.wait_for_rpc(timeout=30) # wait up to 30 seconds for the RPC connection to open
>>> geth.is_rpc_ready
True
>>> geth.wait_for_ipc(timeout=30) # wait up to 30 seconds for the IPC socket to open
>>> geth.is_ipc_ready
True
安装特定的geth
版本
此功能是实验性的,并可能发生破坏性更改。
从v1.14.0开始的所有geth
版本都可以使用`py-geth`安装。有关当前支持的版本列表,请参阅install.py。
安装可以通过命令行完成
$ python -m geth.install v1.14.8
或从python使用`install_geth`函数。
>>> from geth import install_geth
>>> install_geth('v1.14.8')
安装的二进制文件可以在您的家目录下的`$HOME/.py-geth`目录中找到。`v1.14.8`二进制文件位于`$HOME/.py-geth/geth-v1.14.8/bin/geth`。
关于DevGethProcess
DevGethProcess
将以--dev
模式运行geth,旨在方便测试。在这方面,它预先配置如下。
- 创建了一个单独的账户,分配了10亿以太币,并将其分配为coinbase。
- 在
rpc
和ipc
接口上启用了所有API。 - 网络配置为不寻找或连接到任何对等点。
- 使用
networkid
的值为1234
。 - 详细程度设置为
5
(调试) - RPC接口尝试绑定到8545,但如果此端口不可用,则会找到开放的端口。
- DevP2P接口尝试绑定到30303,但如果此端口不可用,则会找到开放的端口。
开发
克隆仓库
$ git clone git@github.com:ethereum/py-geth.git
接下来,从新创建的py-geth
目录运行以下命令
$ python -m pip install -e ".[dev]"
运行测试
您可以使用以下命令运行测试
pytest tests
开发者设置
如果您想对py-geth进行修改,请查阅Snake Charmers战术手册,了解我们如何操作
- 测试
- 拉取请求
- 文档
我们使用pre-commit来维护一致的代码风格。一旦安装,它将自动在每次提交时运行。您也可以使用make lint
手动运行它。如果您需要提交跳过pre-commit
检查的提交,可以使用git commit --no-verify
。
开发环境设置
您可以使用以下方法设置您的开发环境:
git clone git@github.com:ethereum/py-geth.git
cd py-geth
virtualenv -p python3 venv
. venv/bin/activate
python -m pip install -e ".[dev]"
pre-commit install
发布设置
发布新版本
make release bump=$$VERSION_PART_TO_BUMP$$
如何增加版本号
本仓库的版本格式为:稳定版为{major}.{minor}.{patch}
,不稳定版为{major}.{minor}.{patch}-{stage}.{devnum}
(stage
可以是alpha或beta)。
要发布下一个版本,请指定要增加的部分,例如make release bump=minor
或make release bump=devnum
。这通常在主分支上进行,除非发布beta版(在这种情况下,beta版从主分支发布,之前的稳定版从该分支发布)。
如果您处于beta版,make release bump=stage
将切换到稳定版。
当当前版本为稳定版时,要发布不稳定版,请明确指定新版本,例如make release bump="--new-version 4.0.0-alpha.1 devnum"
支持新Geth版本
有一个自动化脚本来帮助添加对新Geth版本的支持:update_geth.py
要添加对新Geth版本的支持,请从py-geth目录中运行以下行,将版本替换为您想要添加支持的版本。请注意,版本中的v
是可选的。
$ python update_geth.py v1_14_0
要支持多个版本,请按递增顺序传入版本,以最新版本结束。
$ python update_geth.py v1_14_0 v1_14_2 v1_14_3
在提交之前始终审查您的更改,因为某些更改可能会在某个时候更改现有模式。最佳做法是使用git差异与引入新Geth版本支持的先前提交进行比较,以确保一切正常。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分布
构建分布
py_geth-5.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 57368b52c6e1c74f2277a2a370c01ad4c73a021835b150619c02dd7bdab3d369 |
|
MD5 | 33c0243c7e4acf15bcaa0254d0bf0351 |
|
BLAKE2b-256 | 48423fe57a03e47523b181fd53383f4707ebef98fea8b3e22826faa5e128b4a3 |
py_geth-5.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bd2edaf8dcba4b3fdf4b33792da0340e114e411feff35b6ac7d58d19252c06b7 |
|
MD5 | 619dd9ec024fa6a707c62c01e88e0064 |
|
BLAKE2b-256 | 76180e132c2f2b157aeb78906bae95d0740ca009101132e57ff8424237082cea |