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
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.
解决方案
-
98% 成功率
setup( name='mypkg', install_requires=['requests>=2.31', 'click>=8'], ) -
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)
无效尝试
常见但无效的做法:
-
90% 失败
The bug is in your setup.py, not setuptools.
-
95% 失败
Still a string; setuptools still iterates characters.
-
85% 失败
Doesn't change the type mismatch in setup().