路径的Python模块

时间:2009-05-14 13:07:27

标签: python mod-python

我正在为mod_python的publisher.py

编写一个最小的替代品

基本前提是它是基于URL方案加载模块:

/foo/bar/a/b/c/d

Whereby / foo /可能是一个目录,'bar'是/foo/index.py中可发布类中的方法ExposedBar。同样,/ foo可能映射到/foo.py,bar是暴露类中的方法。这种语义并不重要。我有一句话:

sys.path.insert(0, path_to_file)  # /var/www/html/{bar|foo}
mod_obj = __import__(module_name)
mod_obj.__name__ = req.filename

然后检查模块是否有适当的类/功能/方法。当进程尽可能地获取剩余的URI数据时,/ a / b / c将传递给该方法或函数。

这个工作正常,直到我有/var/www/html/foo/index.py和/var/www/html/bar/index.py

在浏览器中查看时,选择'index.py'是相当随机的,即使我将第一个搜索路径设置为'/ var / www / html / foo'或'/ var / www / html / bar'然后加载__import __('index')。我不知道为什么通过看似随机的选择找到它。这显示如下:

__name__ is "/var/www/html/foo/index.py"
req.filename is "/var/www/html/foo/index.py"
__file__ is "/var/www/html/bar/index.py"

这个问题是,为什么__import__会随机选择任一索引。如果路径是'/ var / www / html',我会理解这一点,但事实并非如此。其次:

我可以通过它的模块对象的绝对路径加载模块吗?没有修改sys.path。我找不到关于__import__或new.module()的任何文档。

1 个答案:

答案 0 :(得分:3)

  

我可以通过绝对加载模块吗?   路径进入模块对象?没有   修改sys.path。我找不到   __import__或new.module()上的任何文档   对此。

import imp
import os

def module_from_path(path):
    filename = os.path.basename(path)
    modulename = os.path.splitext(filename)[0]

    with open(path) as f:
        return imp.load_module(modulename, f, path, ('py', 'U', imp.PY_SOURCE))