Web3区块链【免费下载链接】web3.pyA python interface for interacting with the Ethereum blockchain and ecosystem.项目地址https://gitcode.com/gh_mirrors/we/web3.py点击查看免费下载本文是 web3.py 官方平台指南 docs/README-freebsd.md 的深度实践解读面向需要在 FreeBSD 上以源码方式搭建 web3.py 开发环境含运行测试套件的开发者。读完本文你将掌握 FreeBSD 上成功编译、安装并验证 web3.py 的全部关键步骤包括 UTF-8 本地化配置、C 扩展编译路径设置、tcsh 环境下的安装技巧以及为运行集成测试而手工编译 geth 的完整流程。一、为什么 FreeBSD 上需要专门的安装流程web3.py 的常规安装只需pip install web3见 docs/quickstart.rst但在 FreeBSD 上这条命令往往会失败。原因在于仓库依赖中存在多个需要本地编译的 C 扩展包。例如 setup.py 中声明的eth-hash[pycryptodome]、eth-account等依赖其底层需要 OpenSSL、libffi 等原生库FreeBSD 的 Python 默认编译参数include 路径、库路径与 Linux 发行版不同若不做针对性配置pip在编译原生模块时会直接报错若系统 locale 不是 UTF-8几乎每一个Python 3 模块的安装都会失败——这是官方文档明确指出的首要前置条件。因此这份官方指南给出的核心思路是先把系统层本地化、编译路径、原生库准备好再进入 Python 层虚拟环境、依赖安装、测试。下面按此顺序展开。版本说明该指南最初针对 FreeBSD 11.2 与 Python 3.6 编写文中py36-virtualenv、virtualenv-3.6等具体版本号需按你的实际系统调整。当前仓库已要求python_requires3.10, 4见 setup.py下文所有命令均以现仓库为前提版本号以你系统实际可用的为准。二、前置条件 1UTF-8 本地化.login_conf官方文档给出的第一项要求是在~/.login_conf中为 charset 和 lang 定义 UTF-8否则几乎所有的 Python 3 模块安装都会失败。FreeBSD 的登录环境由~/.login_conflogin.conf 的用户级覆盖控制。写入以下内容me:\ :charsetUTF-8:\ :langen_US.UTF-8:各行含义如下配置项取值作用charsetUTF-8定义默认字符集保证 Python 解释器与 C 扩展在编码处理上一致langen_US.UTF-8定义 locale影响LC_ALL/LC_CTYPE等环境变量进而影响setuptools、编译器等工具的文本处理配置完成后需要重新登录或重新加载 login class使其生效。可以用locale命令验证当前环境是否为 UTF-8。这一步的失败通常表现为pip install在安装任意依赖时抛出与 Unicode、解码相关的异常且无法通过单独安装某个包绕过。三、前置条件 2C 扩展编译路径~/.pydistutils.cfgweb3.py 及其依赖链中包含大量需要编译的 C/Cython 扩展如 secp256k1 绑定、hash 加速实现。FreeBSD 下这些头文件和库通常位于/usr/local前缀下而 Python 的默认distutils配置并不认识这个路径导致编译阶段找不到头文件/库文件而失败。解决方法是创建~/.pydistutils.cfg显式指定 include 与 library 搜索路径[build_ext] include_dirs/usr/local/include library_dirs/usr/local/lib[build_ext]段会作用于所有基于setuptools/distutils的 C 扩展编译过程include_dirs告诉编译器到哪里找头文件如openssl/、secp256k1.hlibrary_dirs告诉链接器到哪里找动态/静态库如libssl.so、libsecp256k1.so。若缺失该配置典型报错为fatal error: ...: No such file or directory或ld: cannot find -l...。同理Linux 平台的同类问题在 docs/README-linux.md 中通过安装libssl-dev、libffi-dev等系统包解决而 FreeBSD 的解决方式则是通过 pkg 安装包 修正编译路径双管齐下见下一节。四、安装系统依赖包官方指南给出的 pkg 安装命令如下sudo pkg install python3 py36-virtualenv git leveldb libxml2 libxslt pkgconf gmake secp256k1各包在安装流程中的角色包用途python3基础解释器py36-virtualenv提供virtualenv-3.6命令按当前仓库应替换为与你 Python 版本匹配的 virtualenv 包如py310-virtualenvgit克隆源码仓库leveldbLevelDB 数据库库文件Linux/OSX 指南中也有对应安装步骤见 docs/README-linux.md、docs/README-osx.mdlibxml2/libxsltXML 处理库供依赖链中相关扩展编译使用pkgconfpkg-config 实现供依赖构建时查询编译参数gmakeGNU make部分依赖的构建脚本需要secp256k1椭圆曲线签名库web3.py 交易签名与密钥相关功能的底层依赖需要绕过的一个已知问题alloca.h官方文档在安装命令后附了一条特殊注释# hack around https://github.com/ethereum/ethash/pull/107#issuecomment-445072692 sudo touch /usr/local/include/alloca.h这是针对历史版本依赖链中ethash相关代码在 FreeBSD 上找不到alloca.h的兼容性 hack——创建一个空头文件即可让编译通过。当前仓库的依赖树是否仍需要这一步取决于你所安装依赖的具体版本若后续编译报alloca.h缺失按上述方式补上即可不影响其他环节。五、创建并激活虚拟环境官方文档强调使用独立虚拟环境这与 docs/troubleshooting.rst 中最好用 virtualenv 保证环境干净的建议一致。FreeBSD 下的流程mkdir -p /tmp/venv_python virtualenv-3.6 /tmp/venv_python/python3 source /tmp/venv_python/python3/bin/activate.csh注意两个细节文档中source的是activate.csh说明作者使用的是tcsh/csh登录 shellFreeBSD 默认 shell。如果你使用 bash/zsh则应改用bin/activatebash/zsh或bin/activate.fishfishvirtualenv-3.6是 FreeBSD pkg 提供的带版本后缀命令名在当前仓库要求 Python 3.10setup.py的前提下应安装并使用对应版本的 virtualenv或直接使用python3 -m venv现代 FreeBSD 上更推荐后者。激活后建议先升级打包工具链pip install --upgrade pip setuptools六、安装 coincurve 与 web3.py含 tcsh 转义陷阱6.1 先装 coincurvepip install coincurvecoincurve是 secp256k1 的 Python 绑定提前单独安装可以让其编译错误如果存在与 web3.py 本体依赖的安装过程分离便于定位问题。这也是 FreeBSD 指南特有的步骤——Linux/OSX 指南中并无此步因为那两个平台通过系统包管理器apt/pacman/dnf/brew解决了libsecp256k1。6.2 克隆仓库cd /tmp git clone https://github.com/ethereum/web3.py.git cd web3.py官方 docs/contributing.rst 还建议使用git clone --recursive以拉取子模块对于纯安装场景普通 clone 即可。6.3 安装开发依赖# assuming youre using tcsh pip install -e .\[dev\]这里有两层要点第一层为什么是-e .[dev][dev]是 extra 依赖标记。查看 setup.py 可知dev本身包含build、bump_my_version、ipython、twine、wheel等发布/开发工具且extras_require[dev]会再叠加docstesttester三组依赖见 setup.py即一次安装即获得文档构建Sphinx、测试pytest 全家桶与 eth-tester 测试提供器所需的全部依赖-eeditable将仓库以可编辑模式安装修改源码无需重装即可生效适合开发与跑测试。第二层为什么要在[dev]前加反斜杠因为 tcsh 会把方括号当作文件名通配符处理.[dev]会被尝试做 glob 展开而报no match。同理OSX 指南在 docs/README-osx.md 中记录了 zsh 下的同类问题pip install -e .[dev] zsh: no matches found: .[dev]zsh 的解决方式是加引号pip install -e .[dev]因此在 bash 下直接写pip install -e .[dev]即可在 tcsh/zsh 下需转义或加引号。这是各平台指南中反复出现的真坑务必留意。七、安装后的快速验证完成安装后可用以下方式验证 web3.py 是否可用参考 docs/quickstart.rst 的用法 from web3 import Web3 w3 Web3() # 此处需按你的 Provider 配置 w3.is_connected()也可以直接验证 keccak 哈希功能实现位于 web3/main.py w3.keccak(textweb3.py on FreeBSD) HexBytes(0x...)Web3.keccak同时接受primitivebytes/int/None、text、hexstr三种输入形式底层由eth_utils.keccak提供其加速实现依赖的哈希后端正是安装阶段编译/安装的依赖包。若此处调用正常说明原生扩展层已工作正常。八、集成测试前置条件在 FreeBSD 上编译 gethweb3.py 的测试分为核心测试tests/core与集成测试tests/integration。集成测试需要真实节点官方指南给出了在 FreeBSD 上从源码编译 geth 的步骤pkg install go cd /tmp git clone https://github.com/ethereum/go-ethereum cd go-ethereum make geth cp build/bin/geth /usr/local/bin/要点说明先通过pkg install go安装 Go 工具链再从源码构建 geth将产物复制到PATH中集成测试套件通过geth_binaryfixture 定位可执行文件见 tests/integration/go_ethereum/conftest.py若环境变量GETH_BINARY已设置则直接使用否则回退到geth即上述复制到/usr/local/bin的二进制该 fixture 还会校验 geth 版本与 fixture 版本一致仓库当前使用geth-1.16.7-fixture.zip见 tests/integration/go_ethereum/conftest.py版本不匹配时会抛出AssertionError见 conftest.py因此建议编译与 fixture 相同的大版本1.16.x的 geth。8.1 如何运行集成测试在 tox.ini 中定义了集成测试环境例如[testenv] commands integration-goethereum-http: pytest {posargs:tests/integration/go_ethereum/test_goethereum_http.py -k not Async -n auto --maxprocesses15} integration-goethereum-ipc: pytest {posargs:tests/integration/go_ethereum/test_goethereum_ipc.py -k not Async -n auto --maxprocesses15} passenv GETH_BINARY GOROOT GOPATH即运行tox -e py310-integration-goethereum-http之类命令即可GETH_BINARY、GOROOT、GOPATH会被透传给测试进程。也可以直接手动运行pip install -e .[test] pytest tests/integration/go_ethereum/test_goethereum_http.py集成测试涉及 HTTP、IPC、WebSocket 三种连接方式对应 tests/integration/go_ethereum/ 下的test_goethereum_http.py、test_goethereum_ipc.py、test_goethereum_ws/目录覆盖同步与异步两种 API 风格。九、常见问题速查症状原因处理所有 Python 3 模块安装失败locale 非 UTF-8按第二节配置~/.login_conf并重新登录编译报找不到头文件/库include/library 路径缺失按第三节配置~/.pydistutils.cfgno matches found: .[dev]/No match.tcsh/zsh 对方括号做 glob改用pip install -e .[dev]或pip install -e .[dev]编译报alloca.h缺失依赖链兼容性问题sudo touch /usr/local/include/alloca.h集成测试报 geth 版本不匹配geth 版本与 fixture 不符使用与geth-1.16.7-fixture.zip相同大版本的 geth或设置GETH_BINARY环境变量指定路径十、总结FreeBSD 上搭建 web3.py 开发环境的核心经验可以概括为三句话先修好本地化与编译路径再装系统原生库最后才进入 Python 层。官方文档 docs/README-freebsd.md 给出的~/.login_conf、~/.pydistutils.cfg、pkg 依赖清单与 geth 编译步骤正是这条链路每一环的落地配置。同时仓库当前已要求 Python 3.10setup.py与 geth 1.16.x fixturetests/integration/go_ethereum/conftest.py实践时请以这两个版本约束为准替换指南中的历史版本号。完成以上步骤后你的 FreeBSD 机器即可正常进行 web3.py 的开发、文档构建与全量测试。赞分享Web3区块链【免费下载链接】web3.pyA python interface for interacting with the Ethereum blockchain and ecosystem.项目地址https://gitcode.com/gh_mirrors/we/web3.py点击查看免费下载相关推荐HivisionIDPhotos 实操指南3 步出第一张 AI 证件照4 种智能抠图模型这样选HivisionIDPhotos 实操指南3 步出第一张 AI 证件照4 种智能抠图模型这样选 证件照相馆一次 30 元起步改尺寸另加钱周末还得排队。这人工智能AI 应用计算机视觉图像处理后端别再从零搭后台nuxt-shadcn-dashboard 让你半小时拥有生产级 Nuxt 4 仪表盘别再从零搭后台nuxt shadcn dashboard 让你半小时拥有生产级 Nuxt 4 仪表盘 每次搭管理后台侧边栏、数据表格、主题切换都得从头写光KiCad符号库电子设计的核心资源宝库KiCad符号库电子设计的核心资源宝库 你是否曾为寻找合适的电子元件符号而烦恼是否希望有一个全面、规范且持续更新的符号库来加速你的电路设计KiCad符号库上一篇Figtree 开源项目教程下一篇Messenger 开源项目教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考