Python, Pandas и Pico: невозможно импортировать панд, но с NumPy проблем нет - PullRequest
0 голосов
/ 10 сентября 2018

Мне удалось создать простое приложение, использующее инфраструктуру Pico (https://github.com/fergalwalsh/pico). Мой веб-интерфейс без каких-либо трудностей подключается к моему бэкэнду. Ниже приведен мой файл Python, который на данный момент просто возвращает / отображает строку , используя входное значение на стороне клиента, «имя».

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. Это ломается, однако, когда я пытаюсь импортировать панд или SKLearn. Я попытался вручную скопировать и вставить NumPy в /Library/Python/2.7/site-packages, что фактически разрывает приложение. Но NumPy работает в приложении, когда оно только расположено в /site-packages Анаконды.

Я пытался изменить app.register(__name__) на app.register('api'), то есть имя файла Python (api.py), основываясь на другом вопросе / ответе здесь. Я также попытался переустановить Pandas с sudo -H pip install 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 голосов
/ 10 сентября 2018

Вы не упоминаете, как запускаете приложение pico, но я предполагаю, что вы делаете это так:

python -m pico.server api

В этом случае он просто будет использовать все, что python на вашем пути. Если это * python3 в /Users/richardscheiwe/anaconda3/bin/python, но вы получаете ошибки, относящиеся к /Library/Python/2.7/, то существует некоторая проблема с вашими установками / путями anaconda в вашей среде.

В pico нет ничего отличного от запуска простого сценария на python, но я предлагаю вам создать упрощенный сценарий без pico (буквально просто импортировать pandas) для решения проблем вашей среды с помощью более простых сообщений об ошибках.

0 голосов
/ 10 сентября 2018

Если я читаю это правильно, похоже, ошибка возникает из-за попытки использовать версию NumPy, созданную для работы на python 2.6, в то время как ваше приложение работает с Python3.

Попробуйте удалить NumPy с помощью; "sudo pip uninstall numpy", а затем используйте "pip -H install Numpy", чтобы попытаться переустановить его и посмотреть, правильно ли он находит версию Numpy

для Python3.
...