导入与Python 3中内置模块同名的模块

map*_*ple 5 import python-import python-3.x

我遇到了类似的问题,可以简化如下:

例如我有一个文件结构如下:

----folder
    ---- main.py
    ---- math.py
Run Code Online (Sandbox Code Playgroud)

我在 中定义了一个函数math.py,我想将其导入math.py到 中main.py

中的代码math.py如下

# math.py
def f(x) :
    return x**3
Run Code Online (Sandbox Code Playgroud)

如果我编写main.py如下代码

# main.py
import math

def main() :
    print(math.f(3))

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

然后它返回AttributeError: module 'math' has no attribute 'f'

如果我编写main.py如下代码

# main.py
from . import math

def main() :
    print(math.f(3))

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

然后它返回ImportError: cannot import name 'math' from '__main__' (main.py)

我的问题:

  1. 如果我只想导入与内置模块同名的math.py路径中的模块,我该怎么办?folder

  2. 如果我想同时main.py使用my 中定义的和内置的,我该怎么办? math.f(x)math.pymath.acos(x)

PS:我遇到了类似的问题,因为我有十年前某人写的长代码。当时没有这样名称的内置模块(实际上它不是math模块。我只是通过上面的问题简化了问题)。而且这个模块的功能已经被很多地方用到了。因此,更改模块的名称几乎是不可能的,因为如果是这样,我需要仔细更改所有站点module.function()