📜  Python - 从父目录导入

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

Python - 从父目录导入

在本文中,我们将学习如何从父目录导入模块。从Python 3.3 开始,不允许在父目录中引用或导入模块,从下面的示例中您可以清楚地了解这一点。

目录结构

在父目录下,我们有一个子目录geeks.py文件,在子目录下,我们有一个名为temp.py的Python文件,现在我们试试能否从temp.py文件中导入父目录下的geeks模块子目录。

geeks.py(父目录中的模块)

Python3
def geek_method():
    print("This method in geeks module.......bye")


Python3
# importing the module in
# parent directory
from parentdirectory import geeks
  
# calling the func1() method 
# from geeks module
geeks.geek_method()


Python3
import sys
  
# setting path
sys.path.append('../parentdirectory')
  
# importing
from parentdirectory.geeks import geek_method
  
# using
geek_method()


Python3
import path
import sys
  
# directory reach
directory = path.path(__file__).abspath()
  
# setting path
sys.path.append(directory.parent.parent)
  
# importing
from parentdirectory.geeks import geek_method
  
# using
geek_method()


Python3
import sys
import os
  
# getting the name of the directory
# where the this file is present.
current = os.path.dirname(os.path.realpath(__file__))
  
# Getting the parent directory name
# where the current directory is present.
parent = os.path.dirname(current)
  
# adding the parent directory to 
# the sys.path.
sys.path.append(parent)
  
# now we can import the module in the parent
# directory.
import geeks
  
  
geeks.geek_method()


temp.py(子目录中的Python文件)



蟒蛇3

# importing the module in
# parent directory
from parentdirectory import geeks
  
# calling the func1() method 
# from geeks module
geeks.geek_method()

正如我们之前讨论过的,不可能从父目录导入模块,所以这会导致类似这样的错误。

现在让我们学习如何从父目录导入模块

为了导入模块,包含该模块的目录必须存在于 PYTHONPATH 中。它是一个环境变量,包含将由Python加载的包列表。 PYTHONPATH 中的软件包列表也存在于 sys.path 中,因此会将父目录路径添加到 sys.path 中。



在我们的工作中,我们使用三种不同的方法,下面通过示例进行解释。

方法一:这里我们会使用sys模块,直接设置需要的模块的路径。

使用append()方法父目录添加到 sys.path。它是 sys 模块的内置函数,可以与路径变量一起使用来添加特定路径供解释器搜索。以下示例显示了如何做到这一点。

代码:

蟒蛇3

import sys
  
# setting path
sys.path.append('../parentdirectory')
  
# importing
from parentdirectory.geeks import geek_method
  
# using
geek_method()

输出:

This method in geeks module.......bye

方法二:这里我们将使用sys模块以及path模块来获取目录,并直接设置需要的模块的路径。

首先我们将使用path.path(__file__).abspath()获取temp.py文件当前所在目录的名称,然后将该目录添加到sys.path.append进行检查,我们将使用它的方法。

代码:

蟒蛇3



import path
import sys
  
# directory reach
directory = path.path(__file__).abspath()
  
# setting path
sys.path.append(directory.parent.parent)
  
# importing
from parentdirectory.geeks import geek_method
  
# using
geek_method()

输出:

This method in geeks module.......bye

方法三:这里我们将使用 sys 模块和 os 模块来获取目录(当前和父目录)并直接设置所需模块的路径。

首先我们将使用 os.path.dirname(os.path.realpath(__file__)) 获取当前目录,其次我们将使用 os.path.dirname() 获取父目录,最后,添加父目录目录到 sys.path 来检查,我们将使用它的方法。

代码:

蟒蛇3

import sys
import os
  
# getting the name of the directory
# where the this file is present.
current = os.path.dirname(os.path.realpath(__file__))
  
# Getting the parent directory name
# where the current directory is present.
parent = os.path.dirname(current)
  
# adding the parent directory to 
# the sys.path.
sys.path.append(parent)
  
# now we can import the module in the parent
# directory.
import geeks
  
  
geeks.geek_method()

输出: