跳转到主要内容

py-geth: 以子进程运行Go-Ethereum

项目描述

py-geth

Join the conversation on Discord Build Status PyPI version Python versions

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。
  • rpcipc接口上启用了所有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=minormake 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 (34.0 kB 查看哈希值)

源代码

构建分布

py_geth-5.0.0-py3-none-any.whl (27.7 kB 查看哈希值)

上传时间 Python 3

支持者