小编典典

存在相同名称的模块时从内置库导入

python

情况:-我的project_folder中有一个名为Calendar的模块-我想使用Python库中的内置Calendar类-
当我从日历导入Calendar中使用时,它抱怨,因为它试图从我的模块中加载。

有任何想法而不必重命名我的模块吗?


阅读 133

收藏
2020-12-20

共1个答案

小编典典

公认的解决方案包含一种现已弃用的方法。

这里的importlib文档为直接从python> = 3.5的文件路径中加载模块的更合适方法提供了一个很好的示例:

import importlib.util
import sys

# For illustrative purposes.
import tokenize
file_path = tokenize.__file__  # returns "/path/to/tokenize.py"
module_name = tokenize.__name__  # returns "tokenize"

spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
spec.loader.exec_module(module)

因此,您可以从路径加载任何.py文件,并将模块名称设置为所需的名称。因此,只需将设置module_name为您希望模块在导入时使用的任何自定义名称即可。

要加载软件包而不是单个文件,file_path应为软件包根目录的路径__init__.py

2020-12-20