ethereum / web3.py

A python interface for interacting with the Ethereum blockchain and ecosystem.
http://web3py.readthedocs.io
MIT License
4.96k stars 1.69k forks source link

Installing web3-6.0.0b9 in clean environment is missing base58 dependency #2774

Closed rokm closed 1 year ago

rokm commented 1 year ago
aiohttp==3.8.3
aiosignal==1.3.1
async-timeout==4.0.2
attrs==22.2.0
bitarray==2.6.2
certifi==2022.12.7
charset-normalizer==2.1.1
cytoolz==0.12.1
eth-abi==4.0.0b2
eth-account==0.8.0
eth-hash==0.5.1
eth-keyfile==0.6.0
eth-keys==0.4.0
eth-rlp==0.3.0
eth-typing==3.2.0
eth-utils==2.1.0
frozenlist==1.3.3
hexbytes==0.3.0
idna==3.4
jsonschema==4.17.3
lru-dict==1.1.8
multidict==6.0.4
parsimonious==0.9.0
protobuf==4.21.12
pycryptodome==3.16.0
pyrsistent==0.19.3
regex==2022.10.31
requests==2.28.1
rlp==3.0.0
toolz==0.12.0
urllib3==1.26.13
web3==6.0.0b9
websockets==10.4
yarl==1.8.2

What was wrong?

With the latest beta of web3 (6.0.0b9), the ethpm package cannot be imported anymore due to missing base58.

Steps to reproduce (e.g., linux):

python3.9 -m venv venv
. venv/bin/activate
pip install web3==6.0.0b9
python -c "import ethpm"

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/rok/tmp/web3-test/venv/lib64/python3.9/site-packages/ethpm/__init__.py", line 19, in <module>
    from .package import Package  # noqa: E402, F401
  File "/home/rok/tmp/web3-test/venv/lib64/python3.9/site-packages/ethpm/package.py", line 47, in <module>
    from ethpm.dependencies import (
  File "/home/rok/tmp/web3-test/venv/lib64/python3.9/site-packages/ethpm/dependencies.py", line 7, in <module>
    from ethpm.validation.package import (
  File "/home/rok/tmp/web3-test/venv/lib64/python3.9/site-packages/ethpm/validation/package.py", line 11, in <module>
    from ethpm._utils.ipfs import (
  File "/home/rok/tmp/web3-test/venv/lib64/python3.9/site-packages/ethpm/_utils/ipfs.py", line 12, in <module>
    from base58 import (
ModuleNotFoundError: No module named 'base58'

And because the pytest11 entry-point web3.tools.pytest_ethereum.plugins imports ethpm, any attempt to run pytest in an environment with web3==6.0.0b9 installed ends up with an error unless base58 is explicitly installed.

In the previous release, the base58 package was implicitly installed due to the following dependency chain:

web3==6.0.0b8 -> ipfshttpclient==0.8.0a2 -> multiaddr>=0.0.7 -> base58

But with web3==6.0.0b9, ipfshttpclient became an optional dependency that is installed as part of ipfs extra, so it is not installed by default.

How can it be fixed?

base58 should be added to direct web3 dependencies.

fselmo commented 1 year ago

Hey @rokm, thanks for raising this. I'll try to get this ethpm bugfix out asap in the next release.

kclowes commented 1 year ago

Closed via #2775