我可以覆盖python中的模块搜索路径

时间:2014-07-27 13:54:31

标签: python

为了理解python模块搜索路径,我试图通过标准库中已有的名称创建模块。我创建了一个文件' math.py'在我当前的文件夹中,它有一个功能定义' factorial'这需要一个参数。现在,当我导入数学模块并调用“阶乘”时,我希望这样。函数,然后调用我的函数而不是标准库。所有文件都说,搜索路径保存在' sys.path'定义搜索顺序,它为当前目录提供最高优先级。

但是当我运行我的代码时,我发现我的数学模块没有加载,我的阶乘函数没有被调用。 Python继续加载并执行标准库定义。

我哪里出错

这是mymain.py文件

print "running...............>>"
import math
print math.factorial(5)

这是文件math.py(与mymain.py位于同一目录中)

print "math loaded"
def factorial(i) :
    return i+10

现在我执行命令' python mymain.py'

1 个答案:

答案 0 :(得分:0)

我使用此技术从库中屏蔽/覆盖.pyc文件中的功能。我使用了以下声明;

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

允许模块解析机制在库中的模块之前找到父文件夹中的模块。随后可以在库位置找到我未覆盖的模块。

此语句必须在import os之后但在所有库模块导入语句之前。