如何在给定完整路径的情况下导入Python模块?
Python模块是一个由Python代码和一组函数、类和变量定义组成的文件。该模块使代码可重用且易于理解。需要使用该模块的程序应该导入该特定模块。在本文中,我们将讨论如何在给定完整路径的情况下导入Python模块。
有多种方法可用于通过使用其完整路径来导入模块:
- 使用 sys.path.append()函数
- 使用 importlib 包
- 使用 SourceFileLoader 类
考虑以下文件排列,让我们看看如何使用上面列出的方法在main.py 中导入gfg.py模块:
python
|--main.py
|articles
|--gfg.py
下面是gfg.py的代码:
Python3
# class
class GFG:
# method
def method_in():
print("Inside Class method")
# explicit function
def method_out():
print("Inside explicit method")
Python3
# importing module
import sys
# appending a path
sys.path.append('articles')
# importing required module
import gfg
from gfg import GFG
# aceesing its content
GFG.method_in()
gfg.method_out()
Python3
import importlib.util
# specify the module that needs to be
# imported relative to the path of the
# module
spec=importlib.util.spec_from_file_location("gfg","articles/gfg.py")
# creates a new module based on spec
foo = importlib.util.module_from_spec(spec)
# executes the module in its own namespace
# when a module is imported or reloaded.
spec.loader.exec_module(foo)
foo.GFG.method_in()
foo.method_out()
Python3
from importlib.machinery import SourceFileLoader
# imports the module from the given path
foo = SourceFileLoader("gfg","articles/gfg.py").load_module()
foo.GFG.method_in()
foo.method_out()
使用 sys.path.append()函数
这是通过将模块路径添加到路径变量来导入Python模块的最简单方法。 path 变量包含Python解释器为查找源文件中导入的模块而查找的目录。
句法 :
sys.path.append("module_path")
例子 :
蟒蛇3
# importing module
import sys
# appending a path
sys.path.append('articles')
# importing required module
import gfg
from gfg import GFG
# aceesing its content
GFG.method_in()
gfg.method_out()
输出:
Inside Class method
Inside explicit method
使用 importlib 包
importlib 包在可移植到任何Python解释器的Python源代码中提供 import 语句的实现。这使用户能够创建他们的自定义对象,这有助于他们根据自己的需要使用导入过程。 importlib.util 是此包中包含的模块之一,可用于从给定路径导入模块。
句法 :
module = importlib.util.spec_from_file_location(“module_name”, “module_path”)
例子:
蟒蛇3
import importlib.util
# specify the module that needs to be
# imported relative to the path of the
# module
spec=importlib.util.spec_from_file_location("gfg","articles/gfg.py")
# creates a new module based on spec
foo = importlib.util.module_from_spec(spec)
# executes the module in its own namespace
# when a module is imported or reloaded.
spec.loader.exec_module(foo)
foo.GFG.method_in()
foo.method_out()
输出:
Inside Class method
Inside explicit method
使用 SourceFileLoader 类
SourceFileLoader 类是一个抽象基类,用于在实际导入模块的 load_module()函数的帮助下实现源文件加载。
句法 :
module = SourceFileLoader("module_name","module_path").load_module()
例子 :
蟒蛇3
from importlib.machinery import SourceFileLoader
# imports the module from the given path
foo = SourceFileLoader("gfg","articles/gfg.py").load_module()
foo.GFG.method_in()
foo.method_out()
输出:
Inside Class method
Inside explicit method