2009-09-18 127 views
2

是否可以将python模块的'mechanize'和'BeautifulSoup'封装到一个.py文件中?如何封装python模块?

我的问题是以下几点: 我有一个python脚本,需要mechanize和BeautifulSoup。我从一个PHP页面调用它。虚拟主机服务器支持python,但没有安装模块。这就是为什么我想这样做。

对不起,如果这是一个愚蠢的问题。

编辑:谢谢你的答案。我认为这个解决方案解决了virtualenv。有人能够以非常简单的方式向我解释这一点吗?我已经阅读了virtualenv页面,但仍然很困惑。再次感谢。

回答

4

您实际上不必将这些文件合并,或将它们安装到系统范围的位置。只要确保这些库位于您的Python脚本可读的目录中(并且因此可以通过您的PHP应用程序)并添加到Python加载路径中。

Python运行时搜索sys.path数组中的目录中的库。您可以在运行时使用PYTHONPATH环境变量或通过将项明确附加到sys.path来将目录添加到该阵列。下面的代码段,添加到Python脚本,增加了该脚本位于搜索路径的目录,含蓄地让位于同一个地方可供导入的库:

import os, sys 
sys.path.append(os.path.dirname(__file__)) 
+0

感谢您的回复。我的问题知道如下:当我下载BeautifulSoup时,有很多文件。只有'BeautifulSoup.py'足以完成所有的工作?再次,抱歉,如果这是一个愚蠢的问题:)。 – nunos 2009-09-18 21:41:27

+0

您可能需要全部,并且您需要使用python setup.py install进行安装。如果你没有这方面的权利,请尝试virtualenv。 – 2009-09-18 22:09:59

+0

'BeautifulSoup.py'将独立工作,只要它符合进口条件即可。 – Chazadanga 2009-09-20 11:04:56

0

不,你不能(一般),因为这样做会破坏模块搜索方法Python使用(文件和目录)。我想,你可以,有一些黑客,生成模块的层次结构,而无需实际的文件系统布局,但是这是一个庞大的黑客攻击,大概就像

>>> sha=types.ModuleType("sha") 
>>> sha 
<module 'sha' (built-in)> 
['__doc__', '__name__'] 
>>> sha.foo=3 
>>> sha.zam=types.ModuleType("zam") 
>>> sha.foo 
3 
>>> dir(sha) 
['__doc__', '__name__', 'foo', 'zam'] 

但在任何情况下,你将不得不生成代码创建此布局并将这些内容存储到正确命名的标识符中。

你需要的可能是学习使用.egg文件。它们是包含您的库的独特聚集实体,如.jar文件。