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 и го използвам, нямам проблеми.

Въпреки това, когато се опитам да разположа това заедно с колбата. Премествам една директория и стартирам ./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. Инсталирайте вашите зависимости във вашия virtualenv (като активирате virtualenv и след това направите pip install nltk). Ако nltk зависи от някакви библиотеки за разработка, ще трябва да инсталирате и тези библиотеки за разработка. Те могат да бъдат инсталирани чрез вашия мениджър на пакети (apt-get).

  2. Създайте отново своя virtualenv, този път като използвате опцията --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