{"id":24865,"library":"zeo","title":"ZEO","description":"ZEO (Zope Enterprise Objects) provides a client-server storage for ZODB (Zope Object Database). Version 6.2 supports Python >=3.10. Allows multiple processes to share a single ZODB database over a network. ZEO is stable with periodic releases.","status":"active","version":"6.2","language":"python","source_language":"en","source_url":"https://github.com/zopefoundation/ZEO","tags":["ZODB","client-server","database","persistence","object-database","zope"],"install":[{"cmd":"pip install zeo","lang":"bash","label":"Latest stable"}],"dependencies":[{"reason":"ZEO is a storage backend for ZODB.","package":"ZODB","optional":true},{"reason":"Required for interfaces.","package":"zope.interface","optional":false}],"imports":[{"note":"The package is 'ZEO' (uppercase), not 'zeo'. Python packages are case-sensitive on most systems.","wrong":"from zeo import ClientStorage","symbol":"ZEO.ClientStorage","correct":"from ZEO import ClientStorage"}],"quickstart":{"code":"import ZEO\nfrom ZEO import ClientStorage\nimport ZODB\nfrom ZODB import DB\n\naddr = ('localhost', 8100)\nstorage = ClientStorage.ClientStorage(addr)\ndb = DB(storage)\nwith db.transaction() as conn:\n    root = conn.root()\n    root['hello'] = 'world'\n    conn.commit()\ndb.close()","lang":"python","description":"Connects to a ZEO server running on localhost:8100, stores a simple object in the root of the database."},"warnings":[{"fix":"Ensure Python >=3.10 is used.","message":"Python 3.10+ required. ZEO 6.x drops support for Python 2.7, 3.5, 3.6, 3.7, 3.8, 3.9. If you are on an older Python version, you must use ZEO 5.x or lower.","severity":"breaking","affected_versions":">=6.0"},{"fix":"Migrate to RelStorage for production deployments.","message":"ZEO's storages based on FileStorage and zeopack are deprecated. The recommended storage is a RelStorage-backed ZEO server with a PostgreSQL or MySQL backend.","severity":"deprecated","affected_versions":">=6.0"},{"fix":"Start the ZEO server before any client. Use: runzeo -a 8100 -f data.fs","message":"The ZEO server (runzeo) must be running before the client connects. Common mistake: starting the client first results in a ConnectionRefusedError.","severity":"gotcha","affected_versions":"all"},{"fix":"Use ZODB's DB with a thread-safe storage or serialize access.","message":"ZEO is not thread-safe by default. The client storage must be used in a single-threaded manner or with proper locking. Multi-threaded access requires wrapper storages.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Install the correct package: pip install ZEO (note: the package on PyPI is lowercase 'zeo', but the Python module is 'ZEO'. The pip package name is case-insensitive, so 'pip install zeo' works, but import uses 'ZEO').","cause":"Installed 'zeo' (lowercase) but not 'ZEO' (uppercase). The Python package is 'ZEO' with capital letters.","error":"ModuleNotFoundError: No module named 'ZEO'"},{"fix":"Install ZEO: pip install zeo. Then try: from ZEO import ClientStorage","cause":"Possibly missing dependency or incorrect import. Ensure you have the correct version installed.","error":"ImportError: cannot import name 'ClientStorage' from 'ZEO'"},{"fix":"Start the ZEO server: runzeo -a 8100 -f data.fs. Ensure the address and port match.","cause":"The ZEO server is not running or not reachable at the specified address.","error":"ConnectionRefusedError: [Errno 111] Connection refused"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}