2

我的文件夹目录就是这样

/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

但我觉得我在某处缺少一些安装以使其在部署时工作。

4

1 回答 1

2

看起来您的 virtualenv 的激活导致了问题。你在运行之前激活了virtualenvsudo pip install -U pyyaml nltk吗?如果没有,它们是全局安装的。请记住,默认情况下,当您创建 virtualenv 环境时,它将忽略所有未直接安装到环境本身中的包(换句话说,它将忽略您使用全局安装的包apt-get install)。所以,你有两个选择:

  1. 将您的依赖项安装到您的 virtualenv 中(通过激活 virtualenv 然后执行pip install nltk)。如果 nltk 依赖于任何开发库,您还需要安装这些开发库。这些可以使用您的包管理器 ( apt-get) 安装。

  2. 重建您的 virtualenv,这次使用该--system-site-packages选项。这将允许您使用安装在 virtualenv 环境之外的软件包。

于 2013-07-13T15:32:45.527 回答