我可以在Python中覆盖模块搜索路径吗

0 投票
1 回答
1961 浏览
提问于 2025-04-18 14:56

为了理解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之后,但要在所有库模块导入语句之前。

撰写回答