如何封装python模块?

时间:2009-09-18 21:09:49

标签: python encapsulation

是否可以将python模块的“机械化”和“BeautifulSoup”封装到单个.py文件中?

我的问题如下: 我有一个需要机械化和BeautifulSoup的python脚本。我从php页面调用它。 webhost服务器支持python,但没有安装模块。这就是我想这样做的原因。

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

编辑:感谢大家的回答。我认为解决方案可以解决virtualenv问题。有人可以用非常简单的方式向我解释这个问题吗?我已经阅读了virtualenv页面,但仍然非常困惑。再次感谢。

3 个答案:

答案 0 :(得分:4)

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

Python运行时在sys.path数组的目录中搜索库。您可以使用PYTHONPATH环境变量在运行时向该数组添加目录,也可以将项目显式附加到sys.path。下面的代码片段添加到Python脚本中,将脚本所在的目录添加到搜索路径中,隐式地使位于同一位置的任何库可用于导入:

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

答案 1 :(得分:2)

查看virtualenv,创建一个本地python安装,您可以在其中安装BeautifulSoup和您想要的所有其他库。

http://pypi.python.org/pypi/virtualenv

答案 2 :(得分: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文件。