python type_error ai_generated true

TypeError: 'str' object is not iterable in setup(install_requires='requests')

ID: python/setuptools-install-requires-string-not-list

Also available as: JSON · Markdown · 中文
80%Fix Rate
90%Confidence
0Evidence
2024-04-18First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
3.8 active — — —
3.9 active — — —
3.10 active — — —
3.11 active — — —
3.12 active — — —

Root Cause

setup() passes a string instead of a list to install_requires (or extras_require). setuptools iterates the value character-by-character and fails or installs nonsense.

generic

中文

setup() 向 install_requires(或 extras_require)传入字符串而非列表。setuptools 会逐字符迭代该值,导致失败或安装无意义的内容。

Workarounds

  1. 98% success
    setup(
        name='mypkg',
        install_requires=['requests>=2.31', 'click>=8'],
    )
  2. 90% success
    from pathlib import Path
    reqs = [l.strip() for l in Path('requirements.txt').read_text().splitlines() if l.strip() and not l.startswith('#')]
    setup(install_requires=reqs)

Dead Ends

Common approaches that don't work:

  1. 90% fail

    The bug is in your setup.py, not setuptools.

  2. 95% fail

    Still a string; setuptools still iterates characters.

  3. 85% fail

    Doesn't change the type mismatch in setup().