Python,Pandas和Pico:无法导入Pandas,但是NumPy没问题

时间:2018-09-10 13:35:12

标签: python pandas numpy pico

我设法利用Pico框架(https://github.com/fergalwalsh/pico)构建了一个简单的应用程序。我的前端连接到我的后端没有任何困难。下面是我的Python文件,此文件现在使用客户端输入值“ name”简单地返回/提供一个字符串。

from __future__ import absolute_import
import sys
import pico
import numpy as np

# import sklearn
# import pandas as pd
from api2 import aloha

from pico import PicoApp

@pico.expose()
def hello(name):

   a = np.arange(15).reshape(3, 5)
   # a = np.arrange('data', 'field').reshape(3,5)

return "hello %s, %s" %(name, a)

app = PicoApp()
app.register_module(__name__)

(它还返回NumPy数组,只是因为我正在测试可以导入文件的内容。)

我的所有软件包都可以通过Anaconda安装在/site-packages目录中的python3.6中。

奇怪的是,该应用程序运行良好;它可以导入NumPy。但是,当我尝试导入Pandas或SKLearn时,它会中断。我尝试手动将NumPy复制并粘贴到/Library/Python/2.7/site-packages中,这实际上破坏了应用程序。但是,当NumPy仅位于Anaconda的/site-packages中的 中时,它便可以在应用程序中工作。

我已尝试根据此处的另一个问题/答案将app.register(__name__)更改为app.register('api'),这是Python文件(api.py)的名称。我也尝试过使用sudo -H pip install pandas重新安装Pandas,但是已经满足了所有要求。

这是我尝试在api.py中加入熊猫时抛出的错误:

Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/Library/Python/2.7/site-packages/pico/server.py", line 31, in <module>
    app = import_string(module_name)
  File "/Library/Python/2.7/site-packages/werkzeug/utils.py", line 443, in import_string
    sys.exc_info()[2])
  File "/Library/Python/2.7/site-packages/werkzeug/utils.py", line 431, in import_string
    module = import_string(module_name)
  File "/Library/Python/2.7/site-packages/werkzeug/utils.py", line 443, in import_string
    sys.exc_info()[2])
  File "/Library/Python/2.7/site-packages/werkzeug/utils.py", line 418, in import_string
    __import__(import_name)
  File "./api.py", line 6, in <module>
    import pandas as pd
  File "/Library/Python/2.7/site-packages/pandas/__init__.py", line 23, in <module>
    from pandas.compat.numpy import *
  File "/Library/Python/2.7/site-packages/pandas/compat/numpy/__init__.py", line 24, in <module>
    'this pandas version'.format(_np_version))
werkzeug.utils.ImportStringError: import_string() failed for 'api.app'. Possible reasons are:

- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;

Debugged import:

- 'api' not found.

Original exception:

ImportStringError: import_string() failed for 'api'. Possible reasons are:

- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;

Debugged import:

- 'api' not found.

Original exception:

ImportError: this version of pandas is incompatible with numpy < 1.9.0
your numpy version is 1.8.0rc1.
Please upgrade numpy to >= 1.9.0 to use this pandas version

当我运行which python时,它指向/Users/richardscheiwe/anaconda3/bin/python。另外,我已经安装了NumPy v.1.15,但找不到其他NumPy文件夹。当我尝试将NumPy版本移至Library/Python/2.7/site-packages时,出现此错误:

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.

Original error was: cannot import name multiarray

我想我需要以某种方式将应用程序的Python指向Anaconda的Python 3.6版本,但是我不知道该怎么做。 Pico也可以在Anaconda的/site-packages目录中找到,但它没有指向该目录。

任何帮助将不胜感激。我已经搜索了StackOverflow和GitHub。

2 个答案:

答案 0 :(得分:1)

如果我正确地阅读了此内容,则该错误似乎是由于在您的应用程序使用Python3运行时尝试使用为在python 2.6上运行而构建的NumPy版本所致。

尝试使用删除NumPy; “ sudo pip卸载numpy”,然后使用“ pip -H install Numpy”尝试重新安装它,看看是否正确找到了Numpy的Python3版本

答案 1 :(得分:1)

您没有提到如何启动pico应用程序,但我想您的做法是这样的:

python -m pico.server api

在这种情况下,它将仅使用路径中的python。如果它是/Users/richardscheiwe/anaconda3/bin/python中的python3,但您在引用/Library/Python/2.7/时遇到错误,则您的环境中的anaconda安装/路径会出现问题。

与pico相比,运行普通的python脚本没有什么不同,但是我建议您创建一个没有pico的简化脚本(实际上只是导入pandas),以解决环境问题并产生更简单的错误消息。