执行poetry install时报错‘no pyproject.toml or setup.py’求助
Poetry安装plonkathon依赖时merlin包构建失败
环境信息
- Mac OS v13.1
- Python 3.10.8
- pyenv v2.3.14
- Poetry v1.4.0
目标
使用plonkathon仓库进行开发
问题现象
执行poetry install命令时出现如下错误:
Installing dependencies from lock file Package operations: 0 installs, 1 update, 0 removals • Updating merlin (0.1.0 /Users/hoge/Library/Caches/pypoetry/virtualenvs/plonkathon-OEAbpZSY-py3.10/src/curdleproofs.pie/merlin -> 0.1.0 805d067): Failed BuildException Source /Users/hoge/Library/Caches/pypoetry/virtualenvs/plonkathon-OEAbpZSY-py3.10/src/curdleproofs.pie does not appear to be a Python project: no pyproject.toml or setup.py at ~/.pyenv/versions/3.10.8/lib/python3.10/site-packages/build/__init__.py:135 in _validate_source_directory 131│ raise BuildException(f'Source {srcdir} is not a directory') 132│ pyproject_toml = os.path.join(srcdir, 'pyproject.toml') 133│ setup_py = os.path.join(srcdir, 'setup.py') 134│ if not os.path.exists(pyproject_toml) and not os.path.exists(setup_py): → 135│ raise BuildException(f'Source {srcdir} does not appear to be a Python project: no pyproject.toml or setup.py') 136│ 137│ 138│ def check_dependency( 139│ req_string: str, ancestral_req_strings: tuple[str, ...] = (), parent_extras: Set[str] = frozenset()
请问是merlin包存在问题,还是我的开发环境有问题?
已尝试的解决方法
- 删除
/Users/hoge/Library/Caches/pypoetry/目录 - 执行
poetry env remove && poetry install命令
但问题依旧。
补充说明
注意到plonkathon的pyproject.toml中指定了subdirectory配置,但似乎未被正确引用,相关配置如下:
merlin = {git = "https://github.com/nalinbhardwaj/curdleproofs.pie", rev = "master", subdirectory = "merlin"}
解决方法
这个问题并非你的环境或merlin包本身的问题,而是Poetry在处理带subdirectory参数的Git依赖时的路径识别bug。
Poetry缓存克隆的仓库后,构建过程错误地指向了仓库根目录(curdleproofs.pie),而非配置中指定的merlin子目录,而根目录确实没有Python项目所需的pyproject.toml或setup.py,因此抛出错误。可以尝试以下步骤解决:
- 清除对应Git依赖的缓存
手动删除缓存中的目标仓库目录,让Poetry重新克隆并识别子目录:
rm -rf /Users/hoge/Library/Caches/pypoetry/virtualenvs/plonkathon-OEAbpZSY-py3.10/src/curdleproofs.pie
执行完成后重新运行poetry install。
- 升级Poetry版本
你当前使用的Poetry 1.4.0在处理subdirectory依赖时存在已知问题,升级到最新稳定版大概率能修复该bug:
poetry self update
升级完成后再执行安装命令。
- 改用本地路径依赖
如果以上方法无效,可手动克隆curdleproofs.pie仓库到本地,修改pyproject.toml中的merlin依赖配置为本地路径:
merlin = {path = "/你本地克隆的仓库路径/curdleproofs.pie/merlin"}
之后执行poetry install即可。
内容的提问来源于stack exchange,提问作者adust
相关产品推荐
相关产品推荐

