【问题标题】:pip install pyopencl fails with ImportError: No module named 'numpy'pip install pyopencl 失败并出现 ImportError: No module named 'numpy'
【发布时间】:2019-01-24 16:04:30
【问题描述】:

使用 pip 安装 pyopencl 时,它抱怨缺少 numpy:

Collecting pyopencl
Downloading https://files.pythonhosted.org/packages/bc/58/3ab1246e94986f1b6953e76d7ea7e69d2dbfef7b3f3874eded48524a024f/pyopencl-2018.2.2.tar.gz (341kB)
    100% |████████████████████████████████| 348kB 9.5MB/s 
    Complete output from command python setup.py egg_info:
    ---------------------------------------------------------------------------
    Pybind11 is not installed.
    ---------------------------------------------------------------------------
    Very likely, the build process after this message will fail.

    Simply press Ctrl+C and type
    python -m pip install pybind11
    to fix this. If you don't, the build will continue
    in a few seconds.

    [1] https://pybind11.readthedocs.io/en/stable/
    ---------------------------------------------------------------------------
    Continuing in 1 seconds...    
    ---------------------------------------------------------------------------
    Mako is not installed.
    ---------------------------------------------------------------------------
    That is not a problem, as most of PyOpenCL will be just fine
    without it. Some higher-level parts of pyopencl (such as
    pyopencl.reduction) will not function without the templating engine
    Mako [1] being installed. If you would like this functionality to
    work, you might want to install Mako after you finish
    installing PyOpenCL.

    Simply type
    python -m pip install mako
    either now or after the installation completes to fix this.

    [1] http://www.makotemplates.org/
    ---------------------------------------------------------------------------
    Hit Ctrl-C now if you'd like to think about the situation.
    ---------------------------------------------------------------------------
    Continuing in 1 seconds...   
    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-install-nccshu4t/pyopencl/setup.py", line 353, in <module>
        main()
    File "/tmp/pip-install-nccshu4t/pyopencl/setup.py", line 320, in main
        language='c++',
    File "/tmp/pip-install-nccshu4t/pyopencl/aksetup_helper.py", line 41, in __init__
        self._include_dirs = self.include_dirs
    File "/tmp/pip-install-nccshu4t/pyopencl/aksetup_helper.py", line 55, in get_include_dirs
        return self._include_dirs + self.get_additional_include_dirs()
    File "/tmp/pip-install-nccshu4t/pyopencl/aksetup_helper.py", line 52, in get_additional_include_dirs
        return [self.get_numpy_incpath()]
    File "/tmp/pip-install-nccshu4t/pyopencl/aksetup_helper.py", line 47, in get_numpy_incpath
        file, pathname, descr = find_module("numpy")
    File "/home/app/nb-ocl/.venv/lib/python3.5/imp.py", line 296, in find_module
        raise ImportError(_ERR_MSG.format(name), name=name)
    ImportError: No module named 'numpy'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-nccshu4t/pyopencl/

这是在 PyPI 中发布的最新版本 pyopencl 的问题。 github repo 中的最新版本已经解决了这个问题,在 setup.py::setup() 中使用新的ExtensionUsingNumpy 而不是旧的NumpyExtension

不过,如果没有安装 Mako 和 pybind11 依赖项,pyopencl 的安装将失败。为什么 setup.py/setuptools 也不处理这些?

【问题讨论】:

  • 我也遇到了同样的问题。
  • 所以安装numpy
  • XXN:应该由 IMO 的 setup.py 处理。如果你安装了 scipy,你不需要预先安装 numpy,它会一路安装。

标签: python setuptools pyopencl


【解决方案1】:

由于 PyPI 中没有可用的二进制文件(轮子),pip install 默认拉取软件分发 (sdist) 存档并尝试构建它。 pyopencl 的构建过程依赖于 numpy、pybind11 和 mako,因此 pip 失败。

OTOH 如果 pyopencl 提供了二进制文件(轮子),这个问题可以被规避。有一个等待审核的拉取请求应该对此有所帮助:https://github.com/inducer/pyopencl/pull/264

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多