Python 使用NLTK而不安装

Python 使用NLTK而不安装,python,nlp,nltk,Python,Nlp,Nltk,使用自然语言工具包学习Python非常有趣,它们在我的本地机器上工作得很好,尽管我必须安装几个软件包才能使用它。NLTK资源现在是如何集成到我的系统中的,这对我来说仍然是个谜,尽管NLTK源代码显然不是简单地放在Python解释器知道如何找到它的地方 我想使用我的网站上的工具包,它是由另一家公司托管的。简单地将NLTK源代码文件上传到我的服务器并告诉根目录中的脚本“导入NLTK”是不起作用的;我有点怀疑它会 那么,NLTK安装例程所做的一切与直接导入之间的区别是什么?为什么直接导入无法访问工具箱

使用自然语言工具包学习Python非常有趣,它们在我的本地机器上工作得很好,尽管我必须安装几个软件包才能使用它。NLTK资源现在是如何集成到我的系统中的,这对我来说仍然是个谜,尽管NLTK源代码显然不是简单地放在Python解释器知道如何找到它的地方

我想使用我的网站上的工具包,它是由另一家公司托管的。简单地将NLTK源代码文件上传到我的服务器并告诉根目录中的脚本“导入NLTK”是不起作用的;我有点怀疑它会

那么,NLTK安装例程所做的一切与直接导入之间的区别是什么?为什么直接导入无法访问工具箱?有没有一种方法可以在不改变主机Python的情况下使用NLTK源文件

非常感谢您的想法和笔记。
-G

假设NLTK源位于
/some/dir/
中,因此

dhg /some/dir/$ ls nltk
...
app
book.py
ccg
chat
chunk
classify
...    
您可以从
nltk
源目录所在的目录启动python解释器:

dhg /some/dir/$ python
Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34) 
>>> import nltk
或者,您可以将其位置添加到
PYTHONPATH
环境变量中,这使得NLTK在任何地方都可用:

dhg /whatever/$ export PYTHONPATH="$PYTHONPATH:/some/dir/"
dhg /whatever/$ python
Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34) 
>>> import nltk

任何其他依赖项,包括NLTK依赖的依赖项,也可以以相同的方式添加到
PYTHONPATH

不仅在
PYTHONPATH
(as)上需要NLTK,还需要它所具有的任何依赖项;快速的本地测试表明这实际上只是
PyYAML
。您应该只使用
pip
来安装软件包。与手动找出所有依赖项并相应调整
PYTHONPATH
相比,它更不容易出错。如果这是一个共享主机,您没有适当的权限运行
pip
安装,您应该让该主机为您执行安装


为了解决您问题中更一般的“安装脚本正在做什么”部分:大多数Python软件包都是使用
setup.py
管理的,它构建在
distutils
之上(有时是
setuputils
)。如果这是您真正感兴趣的内容,请查看。

您不需要系统安装支持,只需要python可以找到的合适模块。我在没有系统安装权限的情况下设置了NLTK,相对来说麻烦不大——但我确实有命令行访问权限,所以我可以看到我在做什么

要使其正常工作,您应该在您控制的计算机上进行本地安装——最好是从未安装过NLTK的计算机,因为您可能已经忘记(或不知道)为您配置了什么。一旦你弄清楚你需要什么,把包复制到主机上。但此时,请检查您使用的模块版本是否适合Web服务器的体系结构。尤其是Numpy有不同的32/64位版本IIRC


您还需要了解如何查看来自主机的错误消息。如果默认情况下看不到它们,可以捕获
ImportError
并显示其中包含的消息,或者重定向stderr。。。这取决于您的配置。

您好,dhg。非常感谢你的快速回复,虽然我想我不太清楚。即使nltk目录及其所有内容也位于/some/dir/中,我的托管站点上位于/some/dir/中的脚本也无法导入nltk。这就是为什么当我在本地机器上安装NLTK时,我假设正在执行更复杂的操作。@Gavin,但我认为设置
PYTHONPATH
应该对您有用。你试过了吗?我在导入sys之后在脚本中添加了以下行:sys.path.append(“…/some/dir/”),但仍然不起作用。因为我使用托管帐户,所以无法访问用于扩展Python路径的命令行终端。sys.path.append()出现在很多关于如何在运行时扩展路径的搜索中,我尝试了sys.path.append(“…/some/dir/”)的几种变体,如“/some/dir/nltk”、“/some/dir/nltk/”,等等。运气不好。我觉得我必须对Python如何处理第三方代码缺乏一些核心理解。