Windows 10 编译 Pycocotools 踩坑记

作者: _frendy | 来源:发表于2017-07-22 14:36 被阅读3967次

本文是 Pycocotools 编译踩坑笔记。如果您的环境是 Linux,那么恭喜您,获取 COCO 源码,简单一个 make 即可,本文可以忽略了;然而,如果是 Windows,满满都是坑,生踩过来,笔者也是醉了。

版权声明:本文为 frendy 原创文章,可以随意转载,但请务必在明确位置注明出处。


名词解释

  • COCO 是什么?

Microsoft COCO 是一个标注过的图片数据集,可用以目标检测、分割和描述生成等。Yep, it's all about MS COCO API...

  • Pycocotools 是什么?

顾名思义,python api tools of coco...


实操走起

  • 获取源码
git clone https://github.com/pdollar/coco.git
  • 编译
cd coco/PythonAPI
# install pycocotools locally
python setup.py build_ext --inplace

# install pycocotools to the Python site-packages
python setup.py build_ext install

嗯,如果顺利完成,恭喜您大踏步迈过,来来握个手!嗯,如果掉坑了也不怕,慢慢解决,希望笔者下面的踩坑笔记可以帮到您吧。



各种踩坑

这里笔者主要遇到的有两个问题:

1. Unable to find vcvarsall.bat

其实解决办法也挺简单,配置好 Visual C++ 编译环境即可。笔者这里安装的 VS 2015,于是找到安装包 vs_Community.exe,安装添加 C++ 相关即可。需要注意的是环境变量,如下所示,请确保与本机 VS 版本对应的工具目录配置,这里是
VS140COMNTOOLS。

env

如果问题依旧,可尝试添加 VS90COMNTOOLS 指向 VS140COMNTOOLS

那么,为什么是 VS90COMNTOOLS?

我们来看看编译过程中是如何寻找 vcvarsall.bat 的吧。在文件 ..\Anaconda3\Lib\distutils\msvc9compiler.py 中定位到函数
find_vcvarsall()。如下图示,如果都失败了,最后会找到环境变量 VS90COMNTOOLS。嗯,bingo:

msvc9compiler.py

2. cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” 和 cl: 命令行 error D8021 :无效的数值参数“/Wno-unused-function”

纠结了很久,Github 上有类似的问题 #51,然而 COCO 的作者 pdollar 已明确答复不会支持 Windows 哎...踩到这里,笔者也是不想轻易放弃,于是暴力删掉吧,把参数 Wno-cpp 和 Wno-unused-function 都删掉删掉,如下图所示:

coco/PythonAPI/setup.py

嗯,然后编译通过!是否能正常使用呢?我们在 image caption 的 demo 里试试水,如下图示,可用可用!嗯,什么 COCO,什么 Pycocotools,都是前戏,笔者想实现的是 image caption,后续有进展单独码一篇相关的文字吧。

Image Caption Demo

qrcode_card

相关文章

网友评论

  • f14972d1c35f:出现这种情况怎么办
    Could not find a version that satisfies the requirement locally (from versions: )
    No matching distribution found for locally
    _frendy:@ALONE_26c5 信息太少,没有办法判断是什么问题呀
  • cbb202c48659:请问下,我在跑python setup.py build_ext --inplace时出现了这个错误
    UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 4665: illegal multibyte sequence该咋解决啊
    _frendy:@逍遥王_d2d8 编解码问题,谷歌一下很多哈
  • 33dacdc76615:您好,我是在anaconda(py=36)中构建了tensorflow环境(即py=35),然后激活该环境,在该环境下安装cocotools,但是总是出现第一个错误,改了环境变量或者在msvc9compiler.py里改也还是出错,我的是Visual Studio 2017版,是不是要换成2015版才行?
    cbb202c48659:请问下,我在跑python setup.py build_ext --inplace时出现了这个错误
    UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 4665: illegal multibyte sequence该咋解决啊
    _frendy:@33dacdc76615 嗯,建议是吧
  • fe1a598015b6:你好!请问一下 我在第一次出现了 Unable to find vcvarsall.bat 之后安装的VS2015 环境变量配置正确,但是再次运行 python setup.py build_ext --inplace 的时候,报错,信息如下:
    building 'pycocotools._mask' extension
    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Anaconda3\lib\site-packages\numpy\core\include -I../common -IC:\Anaconda3\include -IC:\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\shared" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\um" "-IC:\Program Files (x86)\Windows Kits\8.1\include\\winrt" /Tcpycocotools/_mask.c /Fobuild\temp.win-amd64-3.6\Release\pycocotools/_mask.obj -Wno-cpp -Wno-unused-function -std=c99
    cl : Command line error D8021 : invalid numeric argument '/Wno-cpp'
    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2

    请问“error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2”作何解释?应该如何处理呀?
  • birdl:您好,我用的是win10+vs2013+py3.6.3, 所以对应的应该是VS120COMNTOOLS吧。 我添加了如你例子里的环境变量, 但是还是有Unable to find vcvarsall.bat问题。请问有什么解决办法吗
    _frendy:@birdl 👍👍
    birdl:已解决,要vs2015或者mv c++2015才能complile py3.5以上
  • manjusaka0424:win10,vs2015,py3.6.3,pycocotools安装成功了在终端里面ipython可以import不报错,但是在jupyter里面报错
    ModuleNotFoundError: No module named 'pycocotools._mask'
    04e98c77b68a:我也是这样
  • 4fe681e91746:win7,vs2017,py3.5.4 64位,按照作者的改了一下,最后出现了这个问题,“can't find file 'io.h'”.
    本人对c++编译环境不熟悉,希望版主能够指导一下。
    _frendy:@Daniel_e0a5 用vs2015吧,17有坑,踩过但具体记不清什么坑了😂
  • f7695bee5b53:惊喜的发现踩到了最后一个坑. 最后输出跟你的不一样.
    正在生成代码
    已完成代码的生成
    rm -rf build
    process_begin: CreateProcess(NULL, rm -rf build, ...) failed.
    make (e=2): 系统找不到指定的文件。
    make: *** [all] 错误 2
    好在实际上API已经安装好可以用了. 我都在想要不要干脆自己实现算了. 还搞毛API
    _frendy:@欧阳1991 恭喜恭喜~😁
  • 南国那片枫叶:你好,我和你遇到同样的问题,按照你的方法也编译通过了,我的电脑win8.1,vs装的vs2015,但是from pycocotools.coco import COCO还是会报错,错误如下:
    Traceback (most recent call last):
    File "D:/DeepLearning/workspaces/python35/keras_Realtime_Multi-Person_Pose_Estimation-master/training/generate_masks.py", line 4, in <module>
    from pycocotools.coco import COCO
    File "D:\Anaconda3\lib\pycocotools\coco.py", line 55, in <module>
    from . import mask as maskUtils
    File "D:\Anaconda3\lib\pycocotools\mask.py", line 3, in <module>
    import pycocotools._mask as _mask
    ImportError: No module named 'pycocotools._mask'
    _frendy:看看 pycocotools 的编译产物,我这边是 _mask.cpython-34m.dll,用对应版本的 Python 3.4 去执行试试看?

本文标题:Windows 10 编译 Pycocotools 踩坑记

本文链接:https://www.haomeiwen.com/subject/lutukxtx.html