Windows下安装onnx遇到的坑

理论上,在conda环境下安装onnx只需要一句指令:

1
pip install onnx

然而直接安装失败,报错提示:

1
2
3
4
5
6
  File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-s3eshb7e\overlay\Lib\site-packages\setuptools\build_meta.py", line 295, in _get_build_requires
self.run_setup()
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-s3eshb7e\overlay\Lib\site-packages\setuptools\build_meta.py", line 311, in run_setup
exec(code, locals())
File "<string>", line 61, in <module>
AssertionError: Could not find cmake in PATH

原来是onnx安装需要CMake,那么到官网下载CMake,或者用pip安装CMake亦可。

1
conda install --upgrade cmake

然而装好CMake再次安装又出现了报错,这次的报错信息还是乱码:

1
error: could not create 'build\lib.win-amd64-cpython-312\onnx\backend\test\data\node\test_averagepool_3d_dilations_large_count_include_pad_is_0_ceil_mode_is_False\test_data_set_0': 鏂囦欢鍚嶆垨鎵╁睍鍚嶅お闀裤\x80\x82

经过查询资料,发现原来是Windows的长文件名限制导致的。参考Github上的一个issue,如果在安装Python的过程中选择了”Disable path length limit”就不会有问题。如果不想重装Python的话,按Win+R输入regedit.exe打开注册表,将“计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem”中的LongPathsEnabled的值修改为1即可。

然而继续报错…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Traceback (most recent call last):
File "C:\Users\[User]\miniconda3\envs\ppocr\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\*in_process.py", line 353, in <module>
main()
File "C:\Users\[User]\miniconda3\envs\ppocr\Lib\site-packages\pip\vendor\pyproject_hooks\in_process\in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[User]\miniconda3\envs\ppocr\Lib\site-packages\pip\vendor\pyproject_hooks\in_process\in_process.py", line 251, in build_wheel
return build_backend().build_wheel(wheel_directory, config_settings,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\build_meta.py", line 410, in build_wheel
return self.build_with_temp_dir(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\build_meta.py", line 395, in build_with_temp_dir
self.run_setup()
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\build_meta.py", line 311, in run_setup
exec(code, locals())
File "<string>", line 327, in <module>
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\**init**.py", line 103, in setup
return distutils.core.setup(**attrs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[core.py](http://core.py/)", line 185, in setup
return run_commands(dist)
^^^^^^^^^^^^^^^^^^
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[core.py](http://core.py/)", line 201, in run_commands
dist.run_commands()
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[dist.py](http://dist.py/)", line 969, in run_commands
self.run_command(cmd)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\[dist.py](http://dist.py/)", line 963, in run_command
super().run_command(command)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[dist.py](http://dist.py/)", line 988, in run_command
cmd_obj.run()
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\normal\Lib\site-packages\wheel\bdist_wheel.py", line 368, in run
self.run_command("build")
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[cmd.py](http://cmd.py/)", line 318, in run_command
self.distribution.run_command(command)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\[dist.py](http://dist.py/)", line 963, in run_command
super().run_command(command)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[dist.py](http://dist.py/)", line 988, in run_command
cmd_obj.run()
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\command\[build.py](http://build.py/)", line 131, in run
self.run_command(cmd_name)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[cmd.py](http://cmd.py/)", line 318, in run_command
self.distribution.run_command(command)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\[dist.py](http://dist.py/)", line 963, in run_command
super().run_command(command)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[dist.py](http://dist.py/)", line 988, in run_command
cmd_obj.run()
File "<string>", line 264, in run
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\distutils\[cmd.py](http://cmd.py/)", line 318, in run_command
self.distribution.run_command(command)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh\overlay\Lib\site-packages\setuptools\[dist.py](http://dist.py/)", line 963, in run_command
super().run_command(command)
File "C:\Users\[User]\AppData\Local\Temp\pip-build-env-64ipubh*\overlay\Lib\site-packages\setuptools\_distutils\[dist.py](http://dist.py/)", line 988, in run_command
cmd_obj.run()
File "<string>", line 243, in run
File "C:\Users\[User]\miniconda3\envs\ppocr\Lib\[subprocess.py](http://subprocess.py/)", line 413, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['C:\\Program Files\\CMake\\bin\\cmake.EXE', '--build', '.', '--config', 'Release', '--', '/maxcpucount:12']' returned non-zero exit status 1.
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for onnx
Failed to build onnx
ERROR: Could not build wheels for onnx, which is required to install pyproject.toml-based projects

这次没找到解决方法,放弃用pip直接安装了😭️。
于是直接从onnx源码编译安装了,详细见Github:onnx/onnx,执行:

1
2
3
4
5
6
git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
# prefer lite proto
set CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pip install -e .

在漫长的等待后终于安装成功了…