📜  如何在给定完整路径的情况下导入Python模块?

📅  最后修改于: 2022-05-13 01:55:02.876000             🧑  作者: Mango

如何在给定完整路径的情况下导入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 是此包中包含的模块之一,可用于从给定路径导入模块。

句法 :

例子:

蟒蛇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