Python AWS EC2实例在移动NLTK数据位置后似乎自毁
因此,我用flask前端构建了一个数据和NLP应用程序,它在本地运行得非常好,但当我尝试在Apache服务器后面的AWS(Ubuntu linux)上设置它时,出现了大量问题,正如我们建议的那样(flask不是为部署而设计的)。在这种设置下,python模块的导入突然变得相当困难,在Stackoverflow上有很多问题。已经解决了其中的5个问题,在整个代码中每次都使用大量Python日志语句来查看各种脚本在什么时候崩溃或挂起(没有错误消息),然后它比以往任何时候都更进一步,出现了关于NLTK语料库位置的问题。不是NLTK模块,导入的很好,只是语料库文件夹 因此,要做到这一点,通常只需要以下代码:Python AWS EC2实例在移动NLTK数据位置后似乎自毁,python,apache,amazon-ec2,nltk,mod-wsgi,Python,Apache,Amazon Ec2,Nltk,Mod Wsgi,因此,我用flask前端构建了一个数据和NLP应用程序,它在本地运行得非常好,但当我尝试在Apache服务器后面的AWS(Ubuntu linux)上设置它时,出现了大量问题,正如我们建议的那样(flask不是为部署而设计的)。在这种设置下,python模块的导入突然变得相当困难,在Stackoverflow上有很多问题。已经解决了其中的5个问题,在整个代码中每次都使用大量Python日志语句来查看各种脚本在什么时候崩溃或挂起(没有错误消息),然后它比以往任何时候都更进一步,出现了关于NLTK语
import nltk
nltk.download()
它打开了一种用户界面,您可以在其中选择要下载的语料库或NLP项目,以及是否更改目录以将其存储在其他地方。默认情况下,它将目录nltk\u data/
置于您的主目录中并将其放入其中
因此,我起初认为问题在于,该文件夹需要Apache用户www-data
的权限,但这不起作用。然后在Apache错误日志中注意到,它在4个文件夹中进行了查找,但没有找到任何内容—其中一个文件夹是/var/www/nltk_data
,没有一个文件夹是它实际所在的主目录。我记不起另外3个了
我看了几个关于Stackoverflow(,,,)的类似问题,但决定用更简单的方法。以下方面也是如此:
sudo mkdir /var/www/nltk_data
sudo cp -r nltk_data/ /var/www/
然后我再次刷新Apache日志,重新启动服务器并开始检查日志。它以通常的速度运行,花了几分钟完成脚本,重新检查日志,新的日志消息不断出现,然后一些关于内存的消息在ssh屏幕上不断重复,日志不再可见。我什么都打不出来。它让我退出,不让我重新登录。进入AWS控制台,重新启动两次。停止,重新启动,仍然无法登录。所以在愤怒中,终止了它。后悔这么做了,但是如果你不能登录的话,你觉得把它保留在那里没有任何意义
问题:
现在可能会有另一次尝试,重新创建实例,可能4MB的ram不足以让我的应用程序和Apache一起使用,我想知道这些问题的答案或任何其他相关提示,以便我下一步必须执行nltk步骤。因此,在设置新实例后,我谢天谢地解决了这个问题,下面是如何:
sudo ln -sT /home/ubuntu/nltk_data /usr/share/nltk_data
我很高兴现在一切正常。我们一直在观察新实例上top
系统监视器的输出,该实例比自毁实例稍大,注意到它从未使用超过40%的内存,但在主脚本运行时,CPU长时间处于最大状态。也许这就是杀死较小实例的原因
当我最初安装stopwords时,它显示在这里:
LookupError:
**********************************************************************
Resource 'corpora/stopwords' not found. Please use the NLTK
Downloader to obtain the resource: >>> nltk.download()
Searched in:
- '/home/ubuntu/nltk_data'
- '/usr/share/nltk_data'
- '/usr/local/share/nltk_data'
- '/usr/lib/nltk_data'
- '/usr/local/lib/nltk_data'
**********************************************************************
然而,apache日志显示,除了
] [pid 19:tid 13] [client 77..] Resource 'corpora/stopwords' not found. Please use the NLTK
[Sat Jul 08 16:35:19.694759 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..] Downloader to obtain the resource: >>> nltk.download()
[Sat Jul 08 16:35:19.694762 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..] Searched in:
[Sat Jul 08 16:35:19.694764 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..] - '/var/www/nltk_data'
[Sat Jul 08 16:35:19.694766 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..] - '/usr/share/nltk_data'
[Sat Jul 08 16:35:19.694768 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..] - '/usr/local/share/nltk_data'
[Sat Jul 08 16:35:19.694770 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..] - '/usr/lib/nltk_data'
[Sat Jul 08 16:35:19.694772 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..] - '/usr/local/lib/nltk_data'
因此,我认为链接而不是复制会更安全,而且使用Apache正在查看的
/usr/share/
目录也会更安全,而不是弄乱自己的目录。我无法与AWS对话,但没有理由将nltk_数据
置于/var/www
之下。只要通过设置环境变量nltk_DATA
(或者在应用程序中调整nltk.DATA.path
,请参见)确保您的nltk
可以找到它,如果“import nltk”工作正常(并且您也拥有所有依赖项),那么您链接到的四个问题中只有1
是相关的,并且没有答案。问题3在任何情况下都是不相关的。感谢您的回答并查看张贴的问题。。同时找到了一个解决我的一个问题的方法-没有,不幸的是EC2实例不能在安全模式下启动,恢复过程听起来不太愉快。这次我有一个内存更大的,以减少它再次发生的机会,我会看看什么时候我到了那一点,如何以及如果我解决nltk目录问题。Apache服务于/usr/share
?你把我弄丢了。但很高兴听到你把它修好了。(您引用的消息来自nltk.data
库,而不是Apache)。是吗?谢谢,我看过了。正如您在Apache日志中所看到的,Apache在5个位置查找,不包括nltk_数据实际所在的1个位置。我不认为Apache想要查看我的主目录更容易,只需将某些东西放在它已经在查看的地方。