我可以在Python中覆盖模块搜索路径吗
为了理解Python模块的搜索路径,我尝试创建一个名字已经在标准库中的模块。我在当前文件夹里创建了一个名为'math.py'的文件,里面有一个叫'factorial'的函数,这个函数需要一个参数。现在我希望当我导入math模块并调用'factorial'函数时,能调用我自己写的这个函数,而不是标准库里的那个。所有文档都说'sys.path'中的搜索路径定义了搜索的顺序,并且优先级最高的是当前目录。
但是当我运行我的代码时,我发现我的math模块没有被加载,我的factorial函数也没有被调用。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
我用这种方法来隐藏或覆盖一个库里的.pyc文件的功能。我用了下面这条语句:
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
这条语句让模块查找机制能够先找到父文件夹里的模块,而不是库里的模块。那些我没有覆盖的模块就会在库的位置被找到。
这条语句必须放在import os
之后,但要在所有库模块导入语句之前。