VS Code中导入pycocotools.coco失败,编译安装遇文件匹配错误求助
ValueError: 'pycocotools/_mask.pyx' doesn't match any files错误 问题描述
在Windows环境下使用VS Code进行Python图像处理,执行from pycocotools.coco import COCO时导入失败。已安装Visual C++ Build Tools,克隆coco官方仓库后运行python3 PythonAPI/setup.py build_ext install,出现以下错误:
Traceback (most recent call last):
File "C:\Users\barti\OneDrive\Documents\coco\PythonAPI\setup.py", line 23, in
cythonize(ext_modules)
File "C:\Users\barti\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\Cython\Build\Dependencies.py", line 970, in cythonize
module_list, module_metadata = create_extension_list(
File "C:\Users\barti\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\Cython\Build\Dependencies.py", line 816, in create_extension_list
for file in nonempty(sorted(extended_iglob(filepattern)), "'%s' doesn't match any files" % filepattern):
File "C:\Users\barti\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\Cython\Build\Dependencies.py", line 114, in nonempty
raise ValueError(error_msg)
ValueError: 'pycocotools/_mask.pyx' doesn't match any files.
解决方案
方案1:直接安装Windows预编译包(推荐)
无需手动编译,直接通过pip安装适配Windows的预编译版本:
pip install pycocotools-windows
安装完成后即可直接导入使用,跳过编译环节。
方案2:修复手动编译的文件缺失问题
如果坚持手动编译,按以下步骤排查:
- 检查克隆的cocoapi仓库完整性:进入
cocoapi/PythonAPI/pycocotools目录,确认存在_mask.pyx文件。若缺失,重新克隆仓库(执行git clone --recursive确保拉取所有子模块)。 - 安装依赖库:
pip install cython numpy - 调整
setup.py路径配置:打开PythonAPI/setup.py,确保Extension的sources路径正确:ext_modules = [ Extension( 'pycocotools._mask', sources=['pycocotools/_mask.pyx', 'pycocotools/maskApi.c'], include_dirs = [numpy.get_include(), 'pycocotools'], extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'], ) ] - 重新执行编译命令(确保在
PythonAPI目录下运行):cd PythonAPI python setup.py build_ext install
方案3:通过conda安装
若使用conda环境,直接从conda-forge源安装:
conda install -c conda-forge pycocotools
内容的提问来源于stack exchange,提问作者vivi25-5

