在 Debian 上的 virtualenv 中 Pip 安装 scikit-learn 失败 - Raspberry PI - 无法构建 scikit-learn

Pip install scikit-learn fails in virtualenv on Debian - Raspberry PI - Failed to build scikit-learn

我在我的 Raspberry Pi 上创建了一个 virtualenv python3.5 3. 在激活的 virtualenv 中安装 scikit-learn 会引发错误。

我想在这个 virtualenv 中正确安装 scikit-learn 并且能够导入 sklearn。

我尝试通过以下方式安装: pip 安装 scikit-learn, sudo pip3 安装 scikit-learn,

此外,我尝试将 openblas 安装到 virtualenv,因为它似乎是必需的(我解释了错误代码)但没有快乐。

请注意,可以在 "base" python3 中的任何 virtualenv 之外安装 scikit-learn。在那里我可以成功安装和导入它。

pip install scikit-learn
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting scikit-learn
  Using cached https://files.pythonhosted.org/packages/57/5c/133b464c8d0be7ac8c9414b6ff2ae848808a35ce03b146fc2c43777e51f9/scikit-learn-0.21.2.tar.gz
Requirement already satisfied: numpy>=1.11.0 in /home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages (from scikit-learn) (1.16.4)
Requirement already satisfied: scipy>=0.17.0 in /home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages (from scikit-learn) (1.3.0)
Requirement already satisfied: joblib>=0.11 in /home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages (from scikit-learn) (0.13.2)
Building wheels for collected packages: scikit-learn
  Building wheel for scikit-learn (setup.py) ... error
  ERROR: Complete output from command /home/pi/python_virtual_env/neural_networks/bin/python3 -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-1vothz0i/scikit-learn/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-tu89p36i --python-tag cp35:
  ERROR: Partial import of sklearn during the build process.
  blas_opt_info:
  blas_mkl_info:
  customize UnixCCompiler
    libraries mkl_rt not found in ['/home/pi/python_virtual_env/neural_networks/lib', '/usr/local/lib', '/usr/lib', '/usr/lib/arm-linux-gnueabihf']
    NOT AVAILABLE

  blis_info:
  customize UnixCCompiler
    libraries blis not found in ['/home/pi/python_virtual_env/neural_networks/lib', '/usr/local/lib', '/usr/lib', '/usr/lib/arm-linux-gnueabihf']
    NOT AVAILABLE

  openblas_info:
  customize UnixCCompiler
  customize UnixCCompiler
  customize UnixCCompiler
    FOUND:
      library_dirs = ['/usr/lib']
      libraries = ['openblas', 'openblas']
      define_macros = [('HAVE_CBLAS', None)]
      language = c

    FOUND:
      library_dirs = ['/usr/lib']
      libraries = ['openblas', 'openblas']
      define_macros = [('HAVE_CBLAS', None)]
      language = c

  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-install-1vothz0i/scikit-learn/setup.py", line 290, in <module>
      setup_package()
    File "/tmp/pip-install-1vothz0i/scikit-learn/setup.py", line 286, in setup_package
      setup(**metadata)
    File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/core.py", line 137, in setup
      config = configuration()
    File "/tmp/pip-install-1vothz0i/scikit-learn/setup.py", line 174, in configuration
      config.add_subpackage('sklearn')
    File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 1036, in add_subpackage
      caller_level = 2)
    File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 1005, in get_subpackage
      caller_level = caller_level + 1)
    File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 942, in _get_configuration_from_setup_py
      config = setup_module.configuration(*args)
    File "sklearn/setup.py", line 66, in configuration
      config.add_subpackage('utils')
    File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 1036, in add_subpackage
      caller_level = 2)
    File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 1005, in get_subpackage
      caller_level = caller_level + 1)
    File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 942, in _get_configuration_from_setup_py
      config = setup_module.configuration(*args)
    File "sklearn/utils/setup.py", line 8, in configuration
      from Cython import Tempita
  ImportError: No module named 'Cython'
  ----------------------------------------
  ERROR: Failed building wheel for scikit-learn
  Running setup.py clean for scikit-learn
Failed to build scikit-learn
Installing collected packages: scikit-learn
  Running setup.py install for scikit-learn ... error
    ERROR: Complete output from command /home/pi/python_virtual_env/neural_networks/bin/python3 -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-1vothz0i/scikit-learn/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-9myxktkm/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/python_virtual_env/neural_networks/include/site/python3.5/scikit-learn:
    ERROR: Partial import of sklearn during the build process.
    blas_opt_info:
    blas_mkl_info:
    customize UnixCCompiler
      libraries mkl_rt not found in ['/home/pi/python_virtual_env/neural_networks/lib', '/usr/local/lib', '/usr/lib', '/usr/lib/arm-linux-gnueabihf']
      NOT AVAILABLE

    blis_info:
    customize UnixCCompiler
      libraries blis not found in ['/home/pi/python_virtual_env/neural_networks/lib', '/usr/local/lib', '/usr/lib', '/usr/lib/arm-linux-gnueabihf']
      NOT AVAILABLE

    openblas_info:
    customize UnixCCompiler
    customize UnixCCompiler
    customize UnixCCompiler
      FOUND:
        define_macros = [('HAVE_CBLAS', None)]
        libraries = ['openblas', 'openblas']
        library_dirs = ['/usr/lib']
        language = c

      FOUND:
        define_macros = [('HAVE_CBLAS', None)]
        libraries = ['openblas', 'openblas']
        library_dirs = ['/usr/lib']
        language = c

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-1vothz0i/scikit-learn/setup.py", line 290, in <module>
        setup_package()
      File "/tmp/pip-install-1vothz0i/scikit-learn/setup.py", line 286, in setup_package
        setup(**metadata)
      File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/core.py", line 137, in setup
        config = configuration()
      File "/tmp/pip-install-1vothz0i/scikit-learn/setup.py", line 174, in configuration
        config.add_subpackage('sklearn')
      File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 1036, in add_subpackage
        caller_level = 2)
      File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 1005, in get_subpackage
        caller_level = caller_level + 1)
      File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 942, in _get_configuration_from_setup_py
        config = setup_module.configuration(*args)
      File "sklearn/setup.py", line 66, in configuration
        config.add_subpackage('utils')
      File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 1036, in add_subpackage
        caller_level = 2)
      File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 1005, in get_subpackage
        caller_level = caller_level + 1)
      File "/home/pi/python_virtual_env/neural_networks/lib/python3.5/site-packages/numpy/distutils/misc_util.py", line 942, in _get_configuration_from_setup_py
        config = setup_module.configuration(*args)
      File "sklearn/utils/setup.py", line 8, in configuration
        from Cython import Tempita
    ImportError: No module named 'Cython'
    ----------------------------------------
ERROR: Command "/home/pi/python_virtual_env/neural_networks/bin/python3 -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-1vothz0i/scikit-learn/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-9myxktkm/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/python_virtual_env/neural_networks/include/site/python3.5/scikit-learn" failed with error code 1 in /tmp/pip-install-1vothz0i/scikit-learn/

实际结果 - 请参阅上面的错误消息。 预期结果 - 通过 pip 成功将 scikit-learn 安装到 virtualenv 中,因此可以在 python3 脚本中导入。

谢谢!

phd 的回答可以说让我走上了正确的轨道。 piwheels 已经安装好了,但是我发现我尝试安装 scikit-learn 的方式是错误的。 Cython-package 也不见了。所以这是解决方法:

  1. 激活虚拟环境
  2. 通过以下方式安装 Cython:python3 -m pip install Cython
  3. 通过以下方式安装 scikit-learn:python3 -m pip install scikit-learn

现在我可以在虚拟环境中导入 sklearn。

谢谢