dev_appserver.py app.yaml产生:ImportError:导入多数组numpy扩展模块失败

时间:2018-09-25 17:13:47

标签: python numpy google-app-engine

我运行以下命令:

dev_appserver.py app.yaml

我得到一个错误:

Traceback (most recent call last):
  File "C:\Users\sehrlich\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "C:\Users\sehrlich\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "C:\Users\sehrlich\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "C:\Users\sehrlich\Desktop\ToolKit\Application Projects\Tableau Web Data Connector Improvement\tableauextensions\main.py", line 2, in <module>
    from Get_Data import get_data, build_connection, run_sql
  File "C:\Users\sehrlich\Desktop\ToolKit\Application Projects\Tableau Web Data Connector Improvement\tableauextensions\Get_Data.py", line 1, in <module>
    import numpy as np
  File "C:\Users\sehrlich\Desktop\ToolKit\Application Projects\Tableau Web Data Connector Improvement\tableauextensions\lib\numpy\__init__.py", line 142, in <module>
    from . import add_newdocs
  File "C:\Users\sehrlich\Desktop\ToolKit\Application Projects\Tableau Web Data Connector Improvement\tableauextensions\lib\numpy\add_newdocs.py", line 13, in <module>
    from numpy.lib import add_newdoc
  File "C:\Users\sehrlich\Desktop\ToolKit\Application Projects\Tableau Web Data Connector Improvement\tableauextensions\lib\numpy\lib\__init__.py", line 8, in <module>
    from .type_check import *
  File "C:\Users\sehrlich\Desktop\ToolKit\Application Projects\Tableau Web Data Connector Improvement\tableauextensions\lib\numpy\lib\type_check.py", line 11, in <module>
    import numpy.core.numeric as _nx
  File "C:\Users\sehrlich\Desktop\ToolKit\Application Projects\Tableau Web Data Connector Improvement\tableauextensions\lib\numpy\core\__init__.py", line 26, in <module>
    raise ImportError(msg)
ImportError:
Importing the multiarray numpy extension module failed.  Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all
files not under version control).  Otherwise reinstall numpy.

我已经安装并卸载了NumPy。当我运行类似的东西时,他们的应用程序运行正常

python -m flask run 

,它使用NumPy没问题。无法找出问题所在。

2 个答案:

答案 0 :(得分:2)

如Dan Cornilescu所说,GAE标准不能将库使用在C [1] [2]中编译的代码使用:

  

[从1开始] 您可以使用第三方库,这些库是不带C扩展名的纯Python代码

     

[From 2] 解释器无法使用C代码加载Python服务;这是一个“纯” Python环境。

NumPy就是其中一种情况,您可以在其Git Repo [3]和Wikipedia [4](用Python,C语言编写)中看到。另外,请检查对此SO question的第一个答案。

很奇怪,我在NumPy上找到了一个仅基于可以在GAE Standard中使用的名为“ TinyNumPy” [5]的“纯” Python版本。根据其Git Repo,这是它的局限性:

  
      
  • ndarray.flat迭代器无法建立索引(它是生成器)。
  •   
  • 不支持Fortran订单。
  •   
  • 支持仅限于bool,uin8,uint16,uint32,uint64,int8,int16,int32,int64,float32,float64的数据类型。
  •   
  • 计算数据统计信息的功能要慢得多,因为迭代是在Python中进行的。
  •   
  • 通过切片进行分配通常非常快,但是如果跨步很不幸,则可能会很慢。
  •   

简而言之,您可以使用GAE Flex或尝试避免使用NumPy。

答案 1 :(得分:1)

由于您要使用GAE提供的numpy,因此:

  • 您不应将其安装在应用程序代码中(回溯表明它是从应用程序的lib目录运行的,该目录是供应商提供的库所在的位置)
  • 您应该在app.yaml的{​​{1}}部分中进行请求:

    libraries
  • 您还应该在系统上本地安装请求的libraries: - name: numpy version: "1.6.1" 版本(而不是在应用程序目录中),以便开发服务器可以使用它,因为numpy是库之一有这样的要求,请参见Using built-in bundled libraries with the local development server

  

运行时提供的许多内置库是   自动提供给本地开发服务器。然而   必须先在本地安装以下内置库,然后才能   在本地开发服务器上使用它们:

     

...