ninja
ninja

先给出两个报错的内容:
d:\Anaconda3\envs\torch\lib\site-packages\torch\utils\cpp_extension.py:189: UserWarning: Error checking compiler version for cl: [WinError 2] 系统找不到指定的文件。

d:\Anaconda3\envs\torch\lib\site-packages\torch\utils\cpp_extension.py:189: UserWarning: Error checking compiler version for cl: 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte

考:https://blog.csdn.net/tanmx219/article/details/100829920

问题一:

C:\Users\pc-01\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\utils\cpp_extension.py:287: UserWarning: Error checking compiler version for cl: 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte
  warnings.warn('Error checking compiler version for {}: {}'.format(compiler, error))
1
2
utf-8的问题,找到报错目录cpp_extension.py的对应代码位置:

也就是283行re.search这里出了问题,把原来的:

match = re.search(r'(\d+)\.(\d+)\.(\d+)', compiler_info.decode().strip())
1
改成

match = re.search(r'(\d+)\.(\d+)\.(\d+)', compiler_info.decode(' gbk').strip())
1
究其原因可能是visual studio的那个cl,原来输出是英文的,直接utf-8解码没问题,新版更加“人性化”的能输出中文,然后pytorch这里没改还是utf-8…所以让pytorch按gbk解码就好

问题二:

Traceback (most recent call last):
  File "C:\Users\pc-01\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\utils\cpp_extension.py", line 1539, in _run_ninja_build
    env=env)
  File "C:\Users\pc-01\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 512, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.
1
2
3
4
5
6
还是这个cpp_extension.py,找到对应位置:

也就是这个_run_ninja_build方法,把下面这个

command = ['ninja', '-v']
1
改成

command = ['ninja','--v']
1
或者

command = ['ninja','--version']
1
好像只有一种改法有效,大概率为后者。这个东西的作用其实单纯就是指定build.ninja文件的第一行输出:

————————————————
版权声明:本文为CSDN博主「xiongxyowo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40714949/article/details/116571010

解决方案:
打开cpp_extension.py,把编码改成' gbk',下面我注释掉了原来的一行(match...),添加了两个print用来追踪。

try:
        if sys.platform.startswith('linux'):
            minimum_required_version = MINIMUM_GCC_VERSION
            version = subprocess.check_output([compiler, '-dumpfullversion', '-dumpversion'])
            version = version.decode().strip().split('.')
        else:
            print("----windows operation system")
            minimum_required_version = MINIMUM_MSVC_VERSION
            compiler_info = subprocess.check_output(compiler, stderr=subprocess.STDOUT)
            # the default decode is 'utf8', since cl.exe will return Chinese, so ' gbk'
            #match = re.search(r'(\d+)\.(\d+)\.(\d+)', compiler_info.decode().strip())
            print("----compiler_info: ", compiler_info.decode(' gbk'))
            match = re.search(r'(\d+)\.(\d+)\.(\d+)', compiler_info.decode(' gbk').strip())
            print("----match: ", match)
            version = (0, 0, 0) if match is None else match.groups()
    except Exception:
        _, error, _ = sys.exc_info()
        warnings.warn('Error checking compiler version for {}: {}'.format(compiler, error))
        return False

问题的起源与解决过程:
原来的maskRCNN太久远,已经忘记是什么时候的事了,这次更新了pytorch,要重新编译。本来是想升级到pytorch1.2,但报错了。于是再回到pytorch1.0.1。还是原来的facebook/maskrcnn-benchmark,该项目原来就成功编译过,再编译应该是不会出问题的,命令很简单,

(torch) D:\maskrcnn-benchmark>python setup.py build develop
#结果报错
d:\Anaconda3\envs\torch\lib\site-packages\torch\utils\cpp_extension.py:189: UserWarning: Error checking compiler version for cl: [WinError 2] 系统找不到指定的文件。
  warnings.warn('Error checking compiler version for {}: {}'.format(compiler, error))
OK,找不到cl.exe是吧,那我call一个,预设一下环境

(torch) D:\maskrcnn-benchmark>call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.6
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
补充说明:如果你用vs2019,那就用下面这条:

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat",通常检查一下,如果输出的不是中文,你就不会有gbk和utf-8冲突的问题了。

再来一次python setup.py build develop,就会出现第二条报错(注意我这里已经添加了两条追踪命令print("----windows operation system"),print("----compiler_info: ", compiler_info)),

(torch10) E:\AMaskRCNN\maskrcnn-benchmark>python setup.py build develop
running build
running build_py
running build_ext
----windows operation system
----compiler_info:  b'\xd3\xc3\xd3\xda x64 \xb5\xc4 Microsoft (R) C/C++ \xd3\xc5\xbb\xaf\xb1\xe0\xd2\xeb\xc6\xf7 19.16.27026.1 \xb0\xe6\r\n\xb0\xe6\xc8\xa8\xcb\xf9\xd3\xd0(C) Microsoft Corporation\xa1\xa3\xb1\xa3\xc1\xf4\xcb\xf9\xd3\xd0\xc8\xa8\xc0\xfb\xa1\xa3\r\n\r\n\xd3\xc3\xb7\xa8: cl [ \xd1\xa1\xcf\xee... ] \xce\xc4\xbc\xfe\xc3\xfb... [ /link \xc1\xb4\xbd\xd3\xd1\xa1\xcf\xee... ]\r\n'
d:\Anaconda3\envs\torch10\lib\site-packages\torch\utils\cpp_extension.py:188: UserWarning: Error checking compiler version for cl: 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte
  warnings.warn('Error checking compiler version for {}: {}'.format(compiler, error))
看着这些乱码就头皮发麻,注意compiler_info得到的是compiler的输出结果,subprocess.check_output只不过对compiler进行了一次空的执行(参考python源码:如,Python-3.7.4\Lib\subprocess.py第351行),

compiler_info = subprocess.check_output(compiler, stderr=subprocess.STDOUT)

于是我直接运行了一下cl.exe,看看这个输出结果到底是什么玩意,

(torch10) E:\AMaskRCNN\maskrcnn-benchmark>cl
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.16.27026.1 版
版权所有(C) Microsoft Corporation。保留所有权利。

用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]
那么现在一目了然,这些中文就是上面对应的字符串,使用utf-8编码时是认不出来的,而python默认的情况下使用的正是utf-8。搞不懂微软啥时把这个cl.exe的运行输出也中文化了,唉,悲催。

b'\xd3\xc3\xd3\xda x64 \xb5\xc4 Microsoft (R) C/C++ \xd3\xc5\xbb\xaf\xb1\xe0\xd2\xeb\xc6\xf7 19.16.27026.1 \xb0\xe6\r\n\xb0\xe6\xc8\xa8\xcb\xf9\xd3\xd0(C) Microsoft Corporation\xa1\xa3\xb1\xa3\xc1\xf4\xcb\xf9\xd3\xd0\xc8\xa8\xc0\xfb\xa1\xa3\r\n\r\n\xd3\xc3\xb7\xa8: cl [ \xd1\xa1\xcf\xee... ] \xce\xc4\xbc\xfe\xc3\xfb... [ /link \xc1\xb4\xbd\xd3\xd1\xa1\xcf\xee... ]\r\n' 
现在问题明白了,要正确识别compiler,就必须使用' gbk'编码,也就是我前面给出的解决方案。

当然,如果你换系统了,在采用utf8的情况下,别忘记改回来。

关于pytorch1.2的额外问题
上面的内容即适用于pytorch1.0.1也适用于pytorch1.20,不过新版本的pytorch1.20有更多的麻烦,最主要的是,老的配置文件不能用了(当然如果你够熟悉,直接改),要用新的配置文件,同时你会发现新版本的maskRCNN有不少函数也已经发生了变化。

还有一处要格外注意,

File "e:\maskrcnn-benchmark\maskrcnn_benchmark\layers\nms.py", line 5, in <module>
    from apex import amp

ModuleNotFoundError: No module named 'apex'

需要安装apex,注意在windows下要到这里去下载,

https://github.com/ptrblck/apex/tree/apex_no_distributed

linux则要到这里下载,

https://github.com/NVIDIA/apex

安装完成后,顺利的话就可以正常运行了。

后记:
办法一
VS编译器换成中文版的以后,可以想像这个问题会成为python们的常态,所以要点只有两点,

1。首先是要

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"

如果你实在不知道怎么运行这个,就在路径中直接添加下面这条,注意可能是Hostx86/x64或其他的,取决于你的操作系统,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64

2。然后,修改你的D:\Anaconda3\envs\torch36\Lib\site-packages\torch\utils\cpp_extension.py,大概从第183行左右(取决于你的版本)开始,try-else 中那段,我加了print(".......blabla....")的那段,不会的话你copy-paste就行。gbk前面有个空格,你少打了可运行不通的。

# First check if the compiler is one of the expected ones for the particular platform.
    if not check_compiler_ok_for_platform(compiler):
        warnings.warn(WRONG_COMPILER_WARNING.format(
            user_compiler=compiler,
            pytorch_compiler=_accepted_compilers_for_platform()[0],
            platform=sys.platform))
        return False
 
    if sys.platform.startswith('darwin'):
        # There is no particular minimum version we need for clang, so we're good here.
        return True
    try:
        if sys.platform.startswith('linux'):
            minimum_required_version = MINIMUM_GCC_VERSION
            version = subprocess.check_output([compiler, '-dumpfullversion', '-dumpversion'])
            version = version.decode().strip().split('.')
        else:
            print("________________windows operation system ______________________")
            minimum_required_version = MINIMUM_MSVC_VERSION
            compiler_info = subprocess.check_output(compiler, stderr=subprocess.STDOUT)
            print("________________compiler info:", compiler_info)
            #match = re.search(r'(\d+)\.(\d+)\.(\d+)', compiler_info.decode().strip())
            match = re.search(r'(\d+)\.(\d+)\.(\d+)', compiler_info.decode(' gbk').strip())
            version = (0, 0, 0) if match is None else match.groups()
    except Exception:
        _, error, _ = sys.exc_info()
        warnings.warn('Error checking compiler version for {}: {}'.format(compiler, error))
        return False
办法二
不修改cpp_extension.py的补充办法:

前面第一步不可以少!!!

因为只有 utf-8 将会被识别,那我们试试在系统中更变:设置-->控制面板 ->找到时钟和区域-> 管理->更改系统区域设置-->使用UTF-8 Unicode 来进行语言转换。如下图所示(图片中没有勾选你一定要选上,然后重启操作系统),

题外话不良后果一个:设置完了后你的CMD,powershell字体会消失。解决办法是点击窗口-->属性修改字体即可
————————————————
版权声明:本文为CSDN博主「丝贝视像-高精度计算机视觉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tanmx219/article/details/100829920

我安装的是VS2019,不知道是不是版本的原因,我按照网上的诸多教程都无法把cl环境配置好,所以在配置cl环境时最后看看自己是哪个版本的

过程
1.找到cl.exe的所在路径,一般都在:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx86\x86(我安在了C盘)

2.在环境变量PATH中添加C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx86\x86(注意,不包含cl.exe)

3.然后再添加C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx86\x86\cl.exe(此时才是cl.exe的完整路径)

4.在DOS窗口输入cl看看有没有相关信息出现,有就成功,没有就再找找其他方法尝试吧!
————————————————
版权声明:本文为CSDN博主「LEO-max」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zouchengzhi1021/article/details/106125716/

I have solved the problem. I meet the problem on Windows, and this is due to ninja fails to compile the plugin.
I set cl.exe(C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30113\bin\Hostx64\x64) and ninja.exe(*\Anaconda\envs\*\Lib\site-packages\ninja\data\bin) to environment variables(I'm not sure if it make sense). Then I change verbose=False to verbose=True in the call to torch.utils.cpp_extension.load in nvdiffrast/torch/ops.py line 84, and find the plugin's resource file folderC:\Users\*\AppData\Local\torch_extensions\torch_extensions\Cache\nvdiffrast_plugin. I cd to the path and try to ninja it, but find ninja call cl.exe, and some head files miss(in my situation is cstddef). Then I search the file, and add the path to environment var INCLUDE(C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30113\include), and the same as LIB(C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30113\lib\x64).
Finally the plugin is successfully complied.

网上给出的路径和vs2017 的不太一样。后来在官方文档里面找到了需要的路径。注意,是vs2017。


1. 在环境变量中Path 那一项中添加两个路径:E:\VS2017\VC\Tools\MSVC\14.10.25017\bin\HostX86\x86

E:\VS2017\Common7\IDE

2. 在环境变量中新建一个LIB 变量,并添加三个路径(记得加分号):

E:\VS2017\VC\Tools\MSVC\14.10.25017\lib\x86; C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\ucrt\x86; C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86;

3. 在环境变量中新建一个INCLUDE 变量,并添加两个路径(记得加分号):

E:\VS2017\VC\Tools\MSVC\14.10.25017\include; C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\ucrt;

4. 在E:\VS2017\VC\Auxiliary\Build 这个路径中点击vcvarall.bat 这个批处理程序。之后打开命令行,输入cl,如果出现下图,则配置成功……

设置cl.exe环境变量相关推荐

  1. java se环境变量设置_JavaSE中环境变量的配置

    在说Java中环境变量配置之前,还是先说说JDK和JRE吧. JRE(Java Runtime Environment),即Java的运行环境.主要包括JVM(Java Virtual Machine ...

  2. 如何设置MySQL的环境变量

    如何设置MySQL的环境变量 1,右击"我的电脑",点击属性,点击高级系统设置,点击环境变量. 2,在系统变量栏,找到Path,双击,点击新建, 内容为你的mysql中bin目录的 ...

  3. linux下设置java,Linux下设置java的环境变量

    Linux上设置java的环境变量 首先安装JDK,网上有很多教程,这里就不再赘述,有一点,安装的时候要注意下载和自己的操作系统位数相一致的JDK文件. 1.uname -a 查看自己系统是x64的还 ...

  4. Ice自学第一步——Windows下安装Ice和设置Ice的环境变量

    第一步,基于Windows下的安装,所以下载windows版的Ice,官网最新版本是Ice3.4.2: http://www.zeroc.com/download/Ice/3.4/Ice-3.4.2. ...

  5. 不要再问我怎么设置Postman的环境变量和全局变量了

    不要再问我怎么设置Postman的环境变量和全局变量了 一.设置环境变量(图片较多,尽量说的详细点) 1.示例 2.如果你没有选择环境变量,则点击眼睛可以进行新增环境变量, 3.如果已选择环境变量,则 ...

  6. linux环境变量设置方法,Linux环境变量设置指南

    以配置java环境变量为例 [编辑]修改/etc/profile文件 此法对所有用户生效 在文件末尾加入以下内容: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAV ...

  7. Ubuntu设置和查看环境变量—笔记4

    1. Ubuntu设置和查看环境变量 1.1 查看环境变量 查看环境变量有三个命令: env:env命令是environment的缩写,用于列出所有的环境变量: export:单独使用export命令 ...

  8. Linux设置和查看环境变量

    Linux设置和查看环境变量 环境变量,简要的说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件.设置变量对于一般人最实用的功能就是:不用拷贝某些dll文件到系统目录中了,而p ...

  9. java如何设置classpath_java的环境变量classpath该怎么设置呢?

    windows xp下配置JDK环境变量: 1.安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为D:/java/jdk1.5.0_08: 2.安装完成后,右击"我的电脑 ...

最新文章

  1. java程序经过编译后会产生byte code_学习廖雪峰的JAVA教程---异常处理(Java的异常)...
  2. 了解mysqlpump工具
  3. android: 静态XML和动态加载XML混合使用,以及重写Layout控件
  4. 阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (四)结案陈词
  5. CodeForces - 1354D Multiset(线段树/二分)
  6. J2EE搭建maven工程(选择使用jdk和增加资源文件夹)
  7. 华为交换机同一vlan不同网段的通信
  8. 图片测量尺寸软件_3D扫描之工件测量检测
  9. Head First设计模式读书笔记三 装饰模式(个人理解:包装模式)
  10. Centos YUM国内163源
  11. 【原创】搭建spark环境中的坑及解决办法
  12. 学python可以做什么职业-学完Python,能找到什么工作?工资多少?
  13. The Reactive Manifesto(响应式宣言)
  14. 给云服务器上传文件,如何给云服务器上传文件
  15. **记录在win10电脑上使用Duet display的一次经历**
  16. 创新实践 | SaaS增长新趋势:产品驱动增长PLG(下)
  17. 什么是CDN,为什么用CDN,如何用CDN
  18. R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类...
  19. 大数据时代之市场调研的必要性
  20. 滴滴java开发面试题_滴滴出行(小桔科技)亲身面试经验分享,java开发岗

热门文章

  1. linux7.4安装语言包,CentOS 7.4安装时报错最简单最直接的解决办法
  2. 字符串操作(Java)
  3. java 中向文本写入和读取hashmap_就靠这一篇HashMap的讲解,我与头条面试官聊了一个小时。...
  4. linux netstat端口占用,Linux系统使用 netstat 查看和检查系统端口占用情况
  5. skype安卓手机版_危险的战争游戏安卓手机版下载-危险的战争下载v1.0.13
  6. Kotlin尾递归优化
  7. Codeforces Gym 100418K Cards 暴力打表
  8. MFC中设备描述表dc的使用
  9. 腾讯2009年笔试题
  10. Apache遇到的问题:APR not found