如何解决在 Python 上安装 web3 时出现的这个错误
Posted
技术标签:
【中文标题】如何解决在 Python 上安装 web3 时出现的这个错误【英文标题】:How can I fix this error installing web3 on Python 【发布时间】:2021-11-02 08:31:03 【问题描述】:ERROR: Command errored out with exit status 1:
command: 'C:\Program Files\Python39\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\KimXD\\AppData\\Local\\Temp\\pip-install-7pjpmdge\\bitarray_3a1e8028774c4a059cdba67b160795fd\\setup.py'"'"'; __file__='"'"'C:\\Users\\KimXD\\AppData\\Local\\Temp\\pip-install-7pjpmdge\\bitarray_3a1e8028774c4a059cdba67b160795fd\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\KimXD\AppData\Local\Temp\pip-record-f8bq9svc\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\KimXD\AppData\Roaming\Python\Python39\Include\bitarray'
cwd: C:\Users\KimXD\AppData\Local\Temp\pip-install-7pjpmdge\bitarray_3a1e8028774c4a059cdba67b160795fd\
Complete output (17 lines):
running install
running build
running build_py
creating build
creating build\lib.win-amd64-3.9
creating build\lib.win-amd64-3.9\bitarray
copying bitarray\test_bitarray.py -> build\lib.win-amd64-3.9\bitarray
copying bitarray\test_util.py -> build\lib.win-amd64-3.9\bitarray
copying bitarray\util.py -> build\lib.win-amd64-3.9\bitarray
copying bitarray\__init__.py -> build\lib.win-amd64-3.9\bitarray
running build_ext
building 'bitarray._bitarray' extension
creating build\temp.win-amd64-3.9
creating build\temp.win-amd64-3.9\Release
creating build\temp.win-amd64-3.9\Release\bitarray
cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Program Files\Python39\include -IC:\Program Files\Python39\include /Tcbitarray/_bitarray.c /Fobuild\temp.win-amd64-3.9\Release\bitarray/_bitarray.obj
error: command 'cl.exe' failed: None
----------------------------------------
ERROR: Command errored out with exit status 1: 'C:\Program Files\Python39\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\KimXD\\AppData\\Local\\Temp\\pip-install-7pjpmdge\\bitarray_3a1e8028774c4a059cdba67b160795fd\\setup.py'"'"'; __file__='"'"'C:\\Users\\KimXD\\AppData\\Local\\Temp\\pip-install-7pjpmdge\\bitarray_3a1e8028774c4a059cdba67b160795fd\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\KimXD\AppData\Local\Temp\pip-record-f8bq9svc\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\KimXD\AppData\Roaming\Python\Python39\Include\bitarray' Check the logs for full command output.
【问题讨论】:
请提供足够的代码,以便其他人更好地理解或重现问题。 你运行了什么命令?请将其包含在您的问题中。 关于错误信息“error: command 'cl.exe' failed”:你安装了cl.exe
吗?您是否尝试手动运行该命令?
以下答案是否解决了您的问题?如果没有,您能否提供有关该问题的更多信息?
【参考方案1】:
我假设您尝试使用 pip 命令python -m pip install web3
(或简称pip install web3
,尽管第一种形式更好)安装 web3。执行此命令时,我遇到了大致相同的错误。
然而,问题不在于 web3,而在于它的依赖项之一。您可以通过使用--no-deps
安装它来检查它,它工作正常:
C:\temp\stack_overflow>pip install --no-deps web3
Collecting web3
Using cached web3-5.24.0-py3-none-any.whl (487 kB)
Installing collected packages: web3
Successfully installed web3-5.24.0
但这可能无法解决您的问题,因为如果没有所有依赖项,该模块可能无法工作。在这种情况下失败的依赖是bitarray。这是因为 bitarray 是一个源包。该库的文档包含安装说明:
如果你有一个可用的 C 编译器,你可以简单地:
$ pip install bitarray
如果您想使用预编译的二进制文件,您可以:
conda install bitarray
(默认 Anaconda 存储库以及 conda-forge 都支持 bitarray) 从Chris Gohlke下载Windows***
我做了最后一步:从提到的网站下载***,然后用pip install bitarray-2.3.4-cp38-cp38-win_amd64.whl
安装它(当然你的版本可能不同)。这就像一个魅力。
但是,web3 也依赖于 lru-dict,这导致了同样的问题。不幸的是,我找不到这个包的预编译二进制文件,所以如果你遇到同样的问题,你现在有两个选择:
使用conda-forge
安装您的软件包。我个人没有使用 conda 的经验,但是 conda-forge 似乎 support lru-dict 包(以及上面提到的 bitarray 包)。
确保安装 Microsoft Visual C++ 14.0 或更高版本。如错误消息中所述:使用“Microsoft C++ Build Tools”获取它:https://visualstudio.microsoft.com/visual-cpp-build-tools/
This page 包含有关如何下载和安装它的更详细说明。
如this SO answer 中所述,我通过将 Visual C++ 编译器更新到最新版本并确保包含 Windows 10 SDK 来使其正常工作。
(venv) C:\temp\stack_overflow>python.exe -m pip install web3
Collecting web3
Using cached web3-5.24.0-py3-none-any.whl (487 kB)
(...lots of lines listing requirements already satisfied...)
Building wheels for collected packages: lru-dict, bitarray
Building wheel for lru-dict (setup.py) ... done
Created wheel for lru-dict: filename=lru_dict-1.1.7-cp39-cp39-win_amd64.whl size=12711 sha256=a6ccbda691f0a941591c1b9c1ae24a5a4ee26d726685f2e71aa382e5b77a3d65
Stored in directory: c:\users\wovano\appdata\local\pip\cache\wheels\86\3f\f6\6efebdbc72403e91c39f8cc817f61627d065eed97921b8e5b8
Building wheel for bitarray (setup.py) ... done
Created wheel for bitarray: filename=bitarray-1.2.2-cp39-cp39-win_amd64.whl size=55817 sha256=a03c3e6ac482b1cbe4adce197f0bd4333c7094af2d785f5575bdff16a024710d
Stored in directory: c:\users\wovano\appdata\local\pip\cache\wheels\f6\b3\8d\0bb7212600c4671dcb713dec6574c37b118c2c321e6ed52fe3
Successfully built lru-dict bitarray
Installing collected packages: bitarray, attrs, async-timeout, websockets, pywin32, protobuf, lru-dict, jsonschema, ipfshttpclient, eth-account, aiohttp, web3
Successfully installed aiohttp-3.7.4.post0 async-timeout-3.0.1 attrs-21.2.0 bitarray-1.2.2 eth-account-0.5.6 ipfshttpclient-0.8.0a2 jsonschema-3.2.0 lru-dict-1.1.7 protobuf-3.18.1 pywin32-302 web3-5.24.0 websockets-9.1
注意:建议在干净的虚拟环境中安装 web3,避免与其他安装的模块版本冲突。
【讨论】:
以上是关于如何解决在 Python 上安装 web3 时出现的这个错误的主要内容,如果未能解决你的问题,请参考以下文章
在 ganache 上调用函数时出现 Web3.py abi keyerror
使用 web3.py 查询远程以太坊节点时出现间歇性“读取超时”错误
尝试 npm install web3 时出现致命错误 LNK1181
使用 web3.py 时出现 ContractLogicError