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
80%Fix Rate
90%Confidence
0Evidence
2024-04-18First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 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
-
98% success
setup( name='mypkg', install_requires=['requests>=2.31', 'click>=8'], ) -
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:
-
90% fail
The bug is in your setup.py, not setuptools.
-
95% fail
Still a string; setuptools still iterates characters.
-
85% fail
Doesn't change the type mismatch in setup().