我设法利用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。
答案 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
),以解决环境问题并产生更简单的错误消息。