Dlib 安装过程中的坑

参考:https://blog.csdn.net/wc781708249/article/details/78562902

1.pip3 install dlib

C:\Users\***>pip3 install dlib
Collecting dlib
  Downloading https://files.pythonhosted.org/packages/df/aa/6a9bb2a763107bb2606d
6ee1aa65fcd3b51375a9ef6436e9c9280b0dd63c/dlib-19.15.0.tar.gz (3.3MB)
    99% |████████████████████████████████| 3.3MB
    100% |████████████████████████████████| 3.3M
Installing collected packages: dlib
  Running setup.py install for dlib ... error
Exception:
Traceback (most recent call last):
  File "d:\python\python36-32\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str
    return s.decode(sys.__stdout__.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 36: invalid continuation byte

解决方案
网上方案:编码问题。Python 3.x 默认utf_8,windows下显示依然是gbk。
改一下...\lib\site-packages\pip\compat\__init__.py中return s.decode('utf_8') 改为return s.decode('cp936')
实测:cp936是什么意思呢?

得到Python群里一位高人指点,明白了cp936就是指系统里第936号编码格式,也就是GB2312。
可以看表:
936 gb2312 简体中文(GB2312)
在python的模块locale中输出的结果:
>>> import locale
>>> encoding=locale.getdefaultlocale()
>>> print encoding
('zh_CN', 'cp936')

如图所示,return s.decode('cp936')放在73行下面还是75行下面呢

>>> import sys
>>> print (sys.__stdout__.encoding)
utf-8

将D:\Python\Python36-32\Lib\site-packages\pip\compat\__init__.py保存修改,再运行pip3 install

C:\Users\zhangming>pip3 install dlib
Traceback (most recent call last):
  File "d:\python\python36-32\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "d:\python\python36-32\lib\runpy.py", line 85, in _run_code exec(code, run_globals)
  File "D:\Python\Python36-32\Scripts\pip3.exe\__main__.py", line 5, in <module>
  File "d:\python\python36-32\lib\site-packages\pip\__init__.py", line 43, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "d:\python\python36-32\lib\site-packages\pip\utils\__init__.py", line 22,in <module>
    from pip.compat import console_to_str, expanduser, stdlib_pkgs
  File "d:\python\python36-32\lib\site-packages\pip\compat\__init__.py", line 74

    return s.decode('cp936')
                           ^

TabError: inconsistent use of tabs and spaces in indentation

这个错误是说你用了tab键作缩进了,
因为在python不像C/C++里用大括号来区分程序块,而是用缩进
所以缩进很重要你把Tab换成空格就好了 

return s.decode('cp936') 回退到顶,然后用空格将格式调到跟之前一样。继续pip3 install

C:\Users\zhangming>pip3 install dlib
Collecting dlib
  Using cached https://files.pythonhosted.org/packages/df/aa/6a9bb2a763107bb2606
d6ee1aa65fcd3b51375a9ef6436e9c9280b0dd63c/dlib-19.15.0.tar.gz
Installing collected packages: dlib
  Running setup.py install for dlib ... error
    Complete output from command d:\python\python36-32\python.exe -u -c "import
setuptools, tokenize;__file__='C:\\Users\\ZHANGM~1\\AppData\\Local\\Temp\\pip-bu
ild-2io03k_m\\dlib\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f
.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" i
nstall --record C:\Users\ZHANGM~1\AppData\Local\Temp\pip-zvdy9qb6-record\install
-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_py
    package init file 'dlib\__init__.py' not found (or not a regular file)
    running build_ext
    Traceback (most recent call last):
      File "C:\Users\ZHANGM~1\AppData\Local\Temp\pip-build-2io03k_m\dlib\setup.py", line 118, in get_cmake_version
        out = subprocess.check_output(['cmake', '--version'])
      File "d:\python\python36-32\lib\subprocess.py", line 336, in check_output  **kwargs).stdout
      File "d:\python\python36-32\lib\subprocess.py", line 403, in run with Popen(*popenargs, **kwargs) as process:
      File "d:\python\python36-32\lib\subprocess.py", line 709, in __init__ restore_signals, start_new_session)
      File "d:\python\python36-32\lib\subprocess.py", line 997, in _execute_child   startupinfo)
    FileNotFoundError: [WinError 2] 系统找不到指定的文件。

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\ZHANGM~1\AppData\Local\Temp\pip-build-2io03k_m\dlib\setup.py", line 257, in <module>
        'Topic :: Software Development',
      File "d:\python\python36-32\lib\site-packages\setuptools\__init__.py", line 129, in setup return distutils.core.setup(**attrs)
      File "d:\python\python36-32\lib\distutils\core.py", line 148, in setup dist.run_commands()
      File "d:\python\python36-32\lib\distutils\dist.py", line 955, in run_commands  self.run_command(cmd)
      File "d:\python\python36-32\lib\distutils\dist.py", line 974, in run_command  cmd_obj.run()
      File "d:\python\python36-32\lib\site-packages\setuptools\command\install.py", line 61, in run return orig.install.run(self)
      File "d:\python\python36-32\lib\distutils\command\install.py", line 545, in run  self.run_command('build')
      File "d:\python\python36-32\lib\distutils\cmd.py", line 313, in run_command  self.distribution.run_command(command)
      File "d:\python\python36-32\lib\distutils\dist.py", line 974, in run_command  cmd_obj.run()
      File "d:\python\python36-32\lib\distutils\command\build.py", line 135, inrun self.run_command(cmd_name)
      File "d:\python\python36-32\lib\distutils\cmd.py", line 313, in run_command self.distribution.run_command(command)
      File "d:\python\python36-32\lib\distutils\dist.py", line 974, in run_command cmd_obj.run()
      File "C:\Users\ZHANGM~1\AppData\Local\Temp\pip-build-2io03k_m\dlib\setup.py", line 127, in run
        cmake_version = self.get_cmake_version()
      File "C:\Users\ZHANGM~1\AppData\Local\Temp\pip-build-2io03k_m\dlib\setup.py", line 123, in get_cmake_version
        "\n*******************************************************************\n")
    RuntimeError:
    *******************************************************************
     CMake must be installed to build the following extensions: dlib
    *******************************************************************
    ----------------------------------------
Command "d:\python\python36-32\python.exe -u -c "import setuptools, tokenize;__f
ile__='C:\\Users\\ZHANGM~1\\AppData\\Local\\Temp\\pip-build-2io03k_m\\dlib\\setu
p.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n',
'\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users
\ZHANGM~1\AppData\Local\Temp\pip-zvdy9qb6-record\install-record.txt --single-ver
sion-externally-managed --compile" failed with error code 1 in C:\Users\ZHANGM~1
\AppData\Local\Temp\pip-build-2io03k_m\dlib\

C:\Users\zhangming>

pip3 install cmake安装cmake成功。继续pip3 install dlib:

Running setup.py install for dlib ... error

Invoking CMake setup: 'cmake C:\Users\ZHANGM~1\AppData\Local\Temp\pip-build-
t54uc88q\dlib\tools\python -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=C:\Users\ZHANGM~1\Ap
pData\Local\Temp\pip-build-t54uc88q\dlib\build\lib.win32-3.6 -DPYTHON_EXECUTABLE
=d:\python\python36-32\python.exe -DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE=C:\Us
ers\ZHANGM~1\AppData\Local\Temp\pip-build-t54uc88q\dlib\build\lib.win32-3.6'
    -- Building for: NMake Makefiles
    -- The C compiler identification is unknown
    -- The CXX compiler identification is unknown
    CMake Error in CMakeLists.txt

引起这个错误的原因是 CMake 找不到 C++ 的编译器,检查 VS 的安装目录是否有 cl.exe 以及 rc.exe 和 rcdll.dll。
如果没有 cl.exe,那么可能是只安装了VS,没有安装 VC 编译器,打开VS,选择 VC 安装即可。
如果没有 rc.exe 和 rcdll.dll,这是编译资源用的,可能安装在 Windows SDK 中,直接复制这两个文件到 VC/bin 目录下即可。

安装VS2017的C++组件,重启电脑,重新pip3 install dlib,安装成功!

猜你喜欢

转载自blog.csdn.net/yblbbblwsle/article/details/81868319