{"id":44859,"library":"eutils","title":"eutils","description":"Python interface to NCBI's E-utilities API (Entrez Programming Utilities). Current version 0.6.1, requires Python >=3.12. Supports searching, fetching, and linking NCBI databases (PubMed, Nucleotide, etc.). Release cadence is irregular.","status":"active","version":"0.6.1","language":"python","source_language":"en","source_url":"https://github.com/biocommons/eutils","tags":["bioinformatics","NCBI","API client"],"install":[{"cmd":"pip install eutils","lang":"bash","label":"Install from PyPI"}],"dependencies":[],"imports":[{"note":"","wrong":"","symbol":"Client","correct":"from eutils import Client"},{"note":"","wrong":"","symbol":"Query","correct":"from eutils import Query"}],"quickstart":{"code":"from eutils import Client\n\n# Use email to comply with NCBI's usage policy (required by eutils)\nclient = Client(email='your_email@example.com', api_key=os.environ.get('NCBI_API_KEY', ''))\nresult = client.esearch(db='pubmed', term='cancer', retmax=5)\nprint(result)","lang":"python","description":"Create a Client with email (required) and optional NCBI API key for higher rate limits, then search PubMed."},"warnings":[{"fix":"Upgrade Python to 3.12+ or pin to eutils==0.5.4.","message":"eutils 0.6.x drops support for Python <3.12. Users on older Python versions must stay on 0.5.x or upgrade Python.","severity":"breaking","affected_versions":">=0.6.0"},{"fix":"Always provide an email when creating a Client. For higher rate limits, register for an NCBI API key and pass it via `api_key` parameter.","message":"NCBI requires an email address and, for high-volume access, an API key. eutils will warn if email is missing, and may block requests without proper identification.","severity":"gotcha","affected_versions":"all"},{"fix":"Parse XML manually or use `eutils.xml_parser` helpers if available. Alternatively, use `eutils.xml_parser.parse_efetch_xml()` to get structured data.","message":"The `efetch` method returns raw XML strings by default, not parsed objects. Users often expect Python objects and are surprised by the string output.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"search_vec":"'0.6.1':16 '3.12':19 'api':10,36 'bioinformat':34 'cadenc':31 'client':37 'current':14 'databas':26 'e':8 'e-util':7 'entrez':11 'etc':29 'eutil':1 'fetch':22 'interfac':3 'irregular':33 'link':24 'ncbi':5,25,35 'nucleotid':28 'program':12 'pubm':27 'python':2,18 'releas':30 'requir':17 'search':21 'support':20 'util':9,13 'version':15","created_at":"2026-06-07T12:52:11.429582+00:00","updated_at":"2026-06-07T12:52:11.429582+00:00","problems":[{"fix":"Initialize Client with email: `Client(email='your.email@example.com')`.","cause":"Creating a Client without the `email` parameter. NCBI policy requires an email address.","error":"EClientWarning: Email not provided. Please provide an email address."},{"fix":"Add a delay between requests or obtain an NCBI API key and pass it to Client: `Client(api_key='your_key')`.","cause":"Exceeding NCBI's rate limit (3 requests/second without API key, 10 requests/second with API key).","error":"requests.exceptions.HTTPError: 429 Client Error: Too Many Requests"},{"fix":"Parse the XML string: `import xml.etree.ElementTree as ET; root = ET.fromstring(raw_xml)`.","cause":"Assuming `efetch` returns parsed data, but it returns raw XML string by default.","error":"AttributeError: 'str' object has no attribute 'find' (when trying to parse efetch result)"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/biocommons/eutils/","github":"https://github.com/biocommons/eutils/","docs":null,"changelog":null,"pypi":null,"npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"passing","verified_at":"2026-06-29","last_verified":"2026-06-29","next_check":"2026-07-29","install_tag":null}}