NLTK с ошибкой импорта колбы

Моя папка в каталоге такова

/maindir
  __init__.py
  settings.py
  start
  /run.py
  /venv
    .. other directories for flask here bin,include..etc
  /app
    __init__.py
    main.py
    views.py
    /nbc
      /__init__.py
      naivebayesclassifier.py

Модуль naivebayesclassifier.py использует библиотеку nltk как таковую.

from nltk.probability import ELEProbDist, FreqDist
import nltk
from collections import defaultdict
from os import listdir  
from os.path import isfile, join

У меня проблема, когда я пытаюсь запустить программу прямо из / app и запустив

python main.py 

который далее включает nbc и использует его, у меня нет проблем.

Однако, когда я пытаюсь развернуть это вместе с flask. Я перемещаю один каталог и запускаю ./start, в котором есть следующие

. venv/bin.activate
./run.py

и run.py имеет следующие

#!venv/bin/python
from app import app
app.run(debug = True)

Это сработало до того, как я включил библиотеку nltk, однако теперь он дает мне сообщение об ошибке

ImportError: No module named nltk.probability

Я установил nltk, используя

sudo pip install -U pyyaml nltk

но я чувствую, что мне где-то не хватает установки, чтобы она работала во время развертывания.


person Rahul    schedule 13.07.2013    source источник
comment
Какую операционную систему вы используете и какую версию Python?   -  person vincent gravitas    schedule 13.07.2013
comment
Ubuntu 12.04 и Python 2.7.3   -  person Rahul    schedule 13.07.2013


Ответы (1)


Похоже, что активация вашего virtualenv вызывает проблему. Вы активировали virtualenv перед запуском sudo pip install -U pyyaml nltk? В противном случае они были установлены глобально. Помните, что по умолчанию, когда вы создаете среду virtualenv, она игнорирует все пакеты, не установленные непосредственно в самой среде (другими словами, она игнорирует пакеты, которые вы установили глобально с помощью apt-get install). Итак, у вас есть два варианта:

  1. Установите свои зависимости в виртуальный виртуальный сервер (активируя виртуальный виртуальный сервер и выполнив pip install nltk). Если nltk зависит от каких-либо библиотек разработки, вам также необходимо установить эти библиотеки разработки. Их можно установить с помощью диспетчера пакетов (apt-get).

  2. Перестройте виртуальную память, на этот раз используя параметр --system-site-packages . Это позволит вам использовать пакеты, установленные вне среды virtualenv.

person Mark Hildreth    schedule 13.07.2013
comment
Я запустил sudo pip install -U pyyaml ​​nltk в venv, и, похоже, он ничего не сделал. Вместо этого я просто попытался запустить pip install nltk, и все, казалось, сработало. Благодарность! - person Rahul; 13.07.2013
comment
@Rahul: Ах, sudo фактически выполнил команду pip в новой оболочке, что означает, что команда выполнялась за пределами virtualenv. - person Mark Hildreth; 13.07.2013