python type_error ai_generated true

类型错误:'str' 对象不可迭代 位于 setup(install_requires='requests')

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

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

其他格式: JSON · Markdown 中文 · English
80%修复率
90%置信度
0证据数
2024-04-18首次发现

版本兼容性

版本状态引入弃用备注
3.8 active — — —
3.9 active — — —
3.10 active — — —
3.11 active — — —
3.12 active — — —

根因分析

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

English

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

解决方案

  1. 98% 成功率
    setup(
        name='mypkg',
        install_requires=['requests>=2.31', 'click>=8'],
    )
  2. 90% 成功率
    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)

无效尝试

常见但无效的做法:

  1. 90% 失败

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

  2. 95% 失败

    Still a string; setuptools still iterates characters.

  3. 85% 失败

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