为备用 python 环境安装 dlib

Installing dlib for an alternate python environment

我已经在 ubuntu 20.04 macbook pro 3,1 上安装了 python 3.6 和默认的 python 3.8

$ sudo make altinstall

我正在尝试使用 pip 为虚拟 3.6 环境构建 dlib,但找不到 header Python.h(请参见下面的代码片段)。

 $ pip install dlib
Collecting dlib
  Using cached dlib-19.20.0.tar.gz (3.2 MB)
Building wheels for collected packages: dlib
  Building wheel for dlib (setup.py) ... error
ERROR: Command errored out with exit status 1:
   command: /home/simon/python/3.6/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-wegw26or/dlib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-wegw26or/dlib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-h8drewsj
       cwd: /tmp/pip-install-wegw26or/dlib/
  Complete output (238 lines):
  running bdist_wheel
  running build
  running build_py
  package init file 'dlib/__init__.py' not found (or not a regular file)
  running build_ext
  Building extension for Python 3.6.8 (default, Jun 15 2020, 10:18:50)
  Invoking CMake setup: 'cmake /tmp/pip-install-wegw26or/dlib/tools/python -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/tmp/pip-install-wegw26or/dlib/build/lib.linux-x86_64-3.6 -DPYTHON_EXECUTABLE=/home/simon/python/3.6/bin/python -DCMAKE_BUILD_TYPE=Release'
  -- The C compiler identification is GNU 9.3.0
  -- The CXX compiler identification is GNU 9.3.0
  -- Check for working C compiler: /usr/bin/cc
  -- Check for working C compiler: /usr/bin/cc -- works
  -- Detecting C compiler ABI info
  -- Detecting C compiler ABI info - done
  -- Detecting C compile features
  -- Detecting C compile features - done
  -- Check for working CXX compiler: /usr/bin/c++
  -- Check for working CXX compiler: /usr/bin/c++ -- works
  -- Detecting CXX compiler ABI info
  -- Detecting CXX compiler ABI info - done
  -- Detecting CXX compile features
  -- Detecting CXX compile features - done
  -- Found PythonInterp: /home/simon/python/3.6/bin/python (found version "3.6.8")
  -- Found PythonLibs: /usr/local/lib/libpython3.6m.a
  -- Performing Test HAS_CPP14_FLAG
  -- Performing Test HAS_CPP14_FLAG - Success
  -- pybind11 v2.2.2
  -- Using CMake version: 3.16.3
  -- Compiling dlib version: 19.20.0
  -- Looking for pthread.h
  -- Looking for pthread.h - found
  -- Performing Test CMAKE_HAVE_LIBC_PTHREAD
  -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
  -- Looking for pthread_create in pthreads
  -- Looking for pthread_create in pthreads - not found
  -- Looking for pthread_create in pthread
  -- Looking for pthread_create in pthread - found
  -- Found Threads: TRUE
  -- Found X11: /usr/include
  -- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so
  -- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so - found
  -- Looking for gethostbyname
  -- Looking for gethostbyname - found
  -- Looking for connect
  -- Looking for connect - found
  -- Looking for remove
  -- Looking for remove - found
  -- Looking for shmat
  -- Looking for shmat - found
  -- Looking for IceConnectionNumber in ICE
  -- Looking for IceConnectionNumber in ICE - found
  -- Found system copy of libpng: /usr/lib/x86_64-linux-gnu/libpng.so;/usr/lib/x86_64-linux-gnu/libz.so
  -- Searching for BLAS and LAPACK
  -- Searching for BLAS and LAPACK
  -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
  -- Checking for module 'cblas'
  --   No package 'cblas' found
  -- Checking for module 'lapack'
  --   Found lapack, version 0.3.8+ds
  -- Looking for sys/types.h
  -- Looking for sys/types.h - found
  -- Looking for stdint.h
  -- Looking for stdint.h - found
  -- Looking for stddef.h
  -- Looking for stddef.h - found
  -- Check size of void*
  -- Check size of void* - done
  -- Found OpenBLAS library
  -- Looking for sgetrf_single
  -- Looking for sgetrf_single - found
  -- Using OpenBLAS's built in LAPACK
  -- Looking for cblas_ddot
  -- Looking for cblas_ddot - found
  -- Looking for sgesv
  -- Looking for sgesv - not found
  -- Looking for sgesv_
  -- Looking for sgesv_ - not found
  CUDA_TOOLKIT_ROOT_DIR not found or specified
  -- Could NOT find CUDA (missing: CUDA_TOOLKIT_ROOT_DIR CUDA_NVCC_EXECUTABLE CUDA_INCLUDE_DIRS CUDA_CUDART_LIBRARY) (Required is at least version "7.5")
  -- DID NOT FIND CUDA
  -- Disabling CUDA support for dlib.  DLIB WILL NOT USE CUDA
  -- C++11 activated.
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /tmp/pip-install-wegw26or/dlib/build/temp.linux-x86_64-3.6
  Invoking CMake build: 'cmake --build . --config Release -- -j1'
  Scanning dependencies of target dlib
  [  0%] Building CXX object dlib_build/CMakeFiles/dlib.dir/base64/base64_kernel_1.cpp.o
  [  1%] Building CXX object dlib_build/CMakeFiles/dlib.dir/bigint/bigint_kernel_1.cpp.o
  [  2%] Building CXX object dlib_build/CMakeFiles/dlib.dir/bigint/bigint_kernel_2.cpp.o
  [  3%] Building CXX object dlib_build/CMakeFiles/dlib.dir/bit_stream/bit_stream_kernel_1.cpp.o
  [  3%] Building CXX object dlib_build/CMakeFiles/dlib.dir/entropy_decoder/entropy_decoder_kernel_1.cpp.o
  [  4%] Building CXX object dlib_build/CMakeFiles/dlib.dir/entropy_decoder/entropy_decoder_kernel_2.cpp.o
  [  5%] Building CXX object dlib_build/CMakeFiles/dlib.dir/entropy_encoder/entropy_encoder_kernel_1.cpp.o
  [  6%] Building CXX object dlib_build/CMakeFiles/dlib.dir/entropy_encoder/entropy_encoder_kernel_2.cpp.o
  [  6%] Building CXX object dlib_build/CMakeFiles/dlib.dir/md5/md5_kernel_1.cpp.o
  [  7%] Building CXX object dlib_build/CMakeFiles/dlib.dir/tokenizer/tokenizer_kernel_1.cpp.o
  [  8%] Building CXX object dlib_build/CMakeFiles/dlib.dir/unicode/unicode.cpp.o
  [  9%] Building CXX object dlib_build/CMakeFiles/dlib.dir/test_for_odr_violations.cpp.o
  [ 10%] Building CXX object dlib_build/CMakeFiles/dlib.dir/sockets/sockets_kernel_1.cpp.o
  [ 10%] Building CXX object dlib_build/CMakeFiles/dlib.dir/bsp/bsp.cpp.o
  [ 11%] Building CXX object dlib_build/CMakeFiles/dlib.dir/dir_nav/dir_nav_kernel_1.cpp.o
  [ 12%] Building CXX object dlib_build/CMakeFiles/dlib.dir/dir_nav/dir_nav_kernel_2.cpp.o
  [ 13%] Building CXX object dlib_build/CMakeFiles/dlib.dir/dir_nav/dir_nav_extensions.cpp.o
  [ 13%] Building CXX object dlib_build/CMakeFiles/dlib.dir/linker/linker_kernel_1.cpp.o
  [ 14%] Building CXX object dlib_build/CMakeFiles/dlib.dir/logger/extra_logger_headers.cpp.o
  [ 15%] Building CXX object dlib_build/CMakeFiles/dlib.dir/logger/logger_kernel_1.cpp.o
  [ 16%] Building CXX object dlib_build/CMakeFiles/dlib.dir/logger/logger_config_file.cpp.o
  [ 16%] Building CXX object dlib_build/CMakeFiles/dlib.dir/misc_api/misc_api_kernel_1.cpp.o
  [ 17%] Building CXX object dlib_build/CMakeFiles/dlib.dir/misc_api/misc_api_kernel_2.cpp.o
  [ 18%] Building CXX object dlib_build/CMakeFiles/dlib.dir/sockets/sockets_extensions.cpp.o
  [ 19%] Building CXX object dlib_build/CMakeFiles/dlib.dir/sockets/sockets_kernel_2.cpp.o
  [ 20%] Building CXX object dlib_build/CMakeFiles/dlib.dir/sockstreambuf/sockstreambuf.cpp.o
  [ 20%] Building CXX object dlib_build/CMakeFiles/dlib.dir/sockstreambuf/sockstreambuf_unbuffered.cpp.o
  [ 21%] Building CXX object dlib_build/CMakeFiles/dlib.dir/server/server_kernel.cpp.o
  [ 22%] Building CXX object dlib_build/CMakeFiles/dlib.dir/server/server_iostream.cpp.o
  [ 23%] Building CXX object dlib_build/CMakeFiles/dlib.dir/server/server_http.cpp.o
  [ 23%] Building CXX object dlib_build/CMakeFiles/dlib.dir/threads/multithreaded_object_extension.cpp.o
  [ 24%] Building CXX object dlib_build/CMakeFiles/dlib.dir/threads/threaded_object_extension.cpp.o
  [ 25%] Building CXX object dlib_build/CMakeFiles/dlib.dir/threads/threads_kernel_1.cpp.o
  [ 26%] Building CXX object dlib_build/CMakeFiles/dlib.dir/threads/threads_kernel_2.cpp.o
  [ 26%] Building CXX object dlib_build/CMakeFiles/dlib.dir/threads/threads_kernel_shared.cpp.o
  [ 27%] Building CXX object dlib_build/CMakeFiles/dlib.dir/threads/thread_pool_extension.cpp.o
  [ 28%] Building CXX object dlib_build/CMakeFiles/dlib.dir/threads/async.cpp.o
  [ 29%] Building CXX object dlib_build/CMakeFiles/dlib.dir/timer/timer.cpp.o
  [ 30%] Building CXX object dlib_build/CMakeFiles/dlib.dir/stack_trace.cpp.o
  [ 30%] Building CXX object dlib_build/CMakeFiles/dlib.dir/cuda/cpu_dlib.cpp.o
  [ 31%] Building CXX object dlib_build/CMakeFiles/dlib.dir/cuda/tensor_tools.cpp.o
  [ 32%] Building CXX object dlib_build/CMakeFiles/dlib.dir/data_io/image_dataset_metadata.cpp.o
  [ 33%] Building CXX object dlib_build/CMakeFiles/dlib.dir/data_io/mnist.cpp.o
  [ 33%] Building CXX object dlib_build/CMakeFiles/dlib.dir/global_optimization/global_function_search.cpp.o
  [ 34%] Building CXX object dlib_build/CMakeFiles/dlib.dir/filtering/kalman_filter.cpp.o
  [ 35%] Building CXX object dlib_build/CMakeFiles/dlib.dir/svm/auto.cpp.o
  [ 36%] Building CXX object dlib_build/CMakeFiles/dlib.dir/gui_widgets/fonts.cpp.o
  [ 36%] Building CXX object dlib_build/CMakeFiles/dlib.dir/gui_widgets/widgets.cpp.o
  [ 37%] Building CXX object dlib_build/CMakeFiles/dlib.dir/gui_widgets/drawable.cpp.o
  [ 38%] Building CXX object dlib_build/CMakeFiles/dlib.dir/gui_widgets/canvas_drawing.cpp.o
  [ 39%] Building CXX object dlib_build/CMakeFiles/dlib.dir/gui_widgets/style.cpp.o
  [ 40%] Building CXX object dlib_build/CMakeFiles/dlib.dir/gui_widgets/base_widgets.cpp.o
  [ 40%] Building CXX object dlib_build/CMakeFiles/dlib.dir/gui_core/gui_core_kernel_1.cpp.o
  [ 41%] Building CXX object dlib_build/CMakeFiles/dlib.dir/gui_core/gui_core_kernel_2.cpp.o
  [ 42%] Building CXX object dlib_build/CMakeFiles/dlib.dir/image_loader/png_loader.cpp.o
  [ 43%] Building CXX object dlib_build/CMakeFiles/dlib.dir/image_saver/save_png.cpp.o
  [ 43%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jaricom.c.o
  [ 44%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcapimin.c.o
  [ 45%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcapistd.c.o
  [ 46%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcarith.c.o
  [ 46%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jccoefct.c.o
  [ 47%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jccolor.c.o
  [ 48%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcdctmgr.c.o
  [ 49%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jchuff.c.o
  [ 50%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcinit.c.o
  [ 50%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcmainct.c.o
  [ 51%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcmarker.c.o
  [ 52%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcmaster.c.o
  [ 53%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcomapi.c.o
  [ 53%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcparam.c.o
  [ 54%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcprepct.c.o
  [ 55%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jcsample.c.o
  [ 56%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdapimin.c.o
  [ 56%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdapistd.c.o
  [ 57%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdarith.c.o
  [ 58%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdatadst.c.o
  [ 59%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdatasrc.c.o
  [ 60%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdcoefct.c.o
  [ 60%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdcolor.c.o
  [ 61%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jddctmgr.c.o
  [ 62%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdhuff.c.o
  [ 63%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdinput.c.o
  [ 63%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdmainct.c.o
  [ 64%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdmarker.c.o
  [ 65%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdmaster.c.o
  [ 66%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdmerge.c.o
  [ 66%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdpostct.c.o
  [ 67%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jdsample.c.o
  [ 68%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jerror.c.o
  [ 69%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jfdctflt.c.o
  [ 70%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jfdctfst.c.o
  [ 70%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jfdctint.c.o
  [ 71%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jidctflt.c.o
  [ 72%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jidctfst.c.o
  [ 73%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jidctint.c.o
  [ 73%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jmemmgr.c.o
  [ 74%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jmemnobs.c.o
  [ 75%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jquant1.c.o
  [ 76%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jquant2.c.o
  [ 76%] Building C object dlib_build/CMakeFiles/dlib.dir/external/libjpeg/jutils.c.o
  [ 77%] Building CXX object dlib_build/CMakeFiles/dlib.dir/image_loader/jpeg_loader.cpp.o
  [ 78%] Building CXX object dlib_build/CMakeFiles/dlib.dir/image_saver/save_jpeg.cpp.o
  [ 79%] Linking CXX static library libdlib.a
  [ 79%] Built target dlib
  Scanning dependencies of target dlib_python
  [ 80%] Building CXX object CMakeFiles/dlib_python.dir/src/dlib.cpp.o
  In file included from /tmp/pip-install-wegw26or/dlib/dlib/external/pybind11/include/pybind11/pytypes.h:12,
                   from /tmp/pip-install-wegw26or/dlib/dlib/external/pybind11/include/pybind11/cast.h:13,
                   from /tmp/pip-install-wegw26or/dlib/dlib/external/pybind11/include/pybind11/attr.h:13,
                   from /tmp/pip-install-wegw26or/dlib/dlib/external/pybind11/include/pybind11/pybind11.h:43,
                   from /tmp/pip-install-wegw26or/dlib/dlib/../dlib/python/pybind_utils.h:6,
                   from /tmp/pip-install-wegw26or/dlib/dlib/../dlib/python.h:6,
                   from /tmp/pip-install-wegw26or/dlib/tools/python/src/opaque_types.h:6,
                   from /tmp/pip-install-wegw26or/dlib/tools/python/src/dlib.cpp:4:
  /tmp/pip-install-wegw26or/dlib/dlib/external/pybind11/include/pybind11/detail/common.h:111:10: fatal error: Python.h: No such file or directory
    111 | #include <Python.h>
        |          ^~~~~~~~~~
  compilation terminated.
  make[2]: *** [CMakeFiles/dlib_python.dir/build.make:63: CMakeFiles/dlib_python.dir/src/dlib.cpp.o] Error 1
  make[1]: *** [CMakeFiles/Makefile2:117: CMakeFiles/dlib_python.dir/all] Error 2
  make: *** [Makefile:84: all] Error 2
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-install-wegw26or/dlib/setup.py", line 261, in <module>
      'Topic :: Software Development',
    File "/home/simon/python/3.6/lib/python3.6/site-packages/setuptools/__init__.py", line 143, in setup
      return distutils.core.setup(**attrs)
    File "/usr/src/Python-3.6.8/Lib/distutils/core.py", line 148, in setup
      dist.run_commands()
    File "/usr/src/Python-3.6.8/Lib/distutils/dist.py", line 955, in run_commands
      self.run_command(cmd)
    File "/usr/src/Python-3.6.8/Lib/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "/home/simon/python/3.6/lib/python3.6/site-packages/wheel/bdist_wheel.py", line 223, in run
      self.run_command('build')
    File "/usr/src/Python-3.6.8/Lib/distutils/cmd.py", line 313, in run_command
      self.distribution.run_command(command)
    File "/usr/src/Python-3.6.8/Lib/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "/usr/src/Python-3.6.8/Lib/distutils/command/build.py", line 135, in run
      self.run_command(cmd_name)
    File "/usr/src/Python-3.6.8/Lib/distutils/cmd.py", line 313, in run_command
      self.distribution.run_command(command)
    File "/usr/src/Python-3.6.8/Lib/distutils/dist.py", line 974, in run_command
      cmd_obj.run()
    File "/tmp/pip-install-wegw26or/dlib/setup.py", line 135, in run
      self.build_extension(ext)
    File "/tmp/pip-install-wegw26or/dlib/setup.py", line 175, in build_extension
      subprocess.check_call(cmake_build, cwd=build_folder)
    File "/usr/src/Python-3.6.8/Lib/subprocess.py", line 311, in check_call
      raise CalledProcessError(retcode, cmd)
  subprocess.CalledProcessError: Command '['cmake', '--build', '.', '--config', 'Release', '--', '-j1']' returned non-zero exit status 2.
  ----------------------------------------
  ERROR: Failed building wheel for dlib

如果我安装 dlib v19.8.2,我会得到同样的错误。

如果我找到 Python.h 我得到

$ locate Python.h
/home/simon/Python-3.6.8/Include/Python.h
/usr/include/python3.8/Python.h
/usr/local/include/python3.6m/Python.h
/usr/src/Python-3.6.8/Include/Python.h
/usr/src/Python-3.6.9/Include/Python.h

我已经尝试安装 libpython-3.6 和 python-3.6 但得到:

$ sudo apt-get install libpython3.6-dev python3.6-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libpython3.6-dev
E: Couldn't find any package by glob 'libpython3.6-dev'
E: Couldn't find any package by regex 'libpython3.6-dev'
E: Unable to locate package python3.6-dev
E: Couldn't find any package by glob 'python3.6-dev'
E: Couldn't find any package by regex 'python3.6-dev'

但无论如何,我的印象是它已被 python3.8-dev 取代,所以即使我找到了这些,我也无法安装它们:

$ sudo apt-get install python3-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python3-dev is already the newest version (3.8.2-0ubuntu2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

当我在 python 3.8 下构建 dlib 时它可以工作,但是由于其他原因我需要使用 python 3.6。请问如何在虚拟 3.6 环境中使用我的 3.6 Python.h header 构建 dlib?

提前感谢您的建议!

我建议为此使用 conda。您将避免担心环境设置。当您使用 conda activate 激活某个环境时(请参见下文),所有相关的环境路径都指向 conda 环境的目录。

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
sudo chmod 755 Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh

conda create -n py36 python=3.6.10

# you should initialize conda during installation and restart shell after installation to get started with conda or run $ source .bashrc from you home directory


conda activate py36
pip install dlib

当然是前面设置的CMakeg++(或其他编译器)