📜  Python - 从不同目录导入模块

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

Python - 从不同目录导入模块

在处理大型项目时,我们可能会遇到想要从不同目录导入模块的情况。但由于某种原因,模块可能无法正确导入。如果您的模块未正确导入,请不要担心。在本文中,我们将讨论从另一个目录导入模块的方法。

注意:模块只是一个以.py扩展名结尾的Python程序,包含模块的文件夹成为一个包。

导入模块

让我们假设,我们有两个不同的文件夹,一个包含main.py这是我们主要的Python文件,我们想从Folder_2进口模块1。

目录结构

- Folder_1
    - main.py
 - Folder_2
     - module1.py

Module1包含两个名为addodd_even 的函数函数add将接受两个参数并返回它们的相加。 odd_even函数将只接受一个参数并打印Even if the number is even or print Odd如果数字是奇数。



模块1.py

Python3
# creating a simple add function
def add(a, b):
    return a+b
  
# creating a simple odd_even function
# to check if the number is odd or even
def odd_even(n):
    if n % 2 == 0:
        print("Even")
    else:
        print("Odd")


Python3
# importing module1 from another folder
import Folder_2
  
# calling odd_even function
module1.odd_even(5)


Python3
# importing sys
import sys
  
# adding Folder_2 to the system path
sys.path.insert(0, '/home/amninder/Desktop/Folder_2')
  
# importing the add and odd_even 
# function
from module1 import odd_even, add
  
# calling odd_even function
odd_even(5)
  
# calling add function
print("Addition of two number is :", add(2, 2))


Python3
# importing the add and odd_even function
from module1 import odd_even, add
  
# calling odd_even function
odd_even(5)
  
# calling add function
print("Addition of two number is :", add(2, 2))


Python3
# importing sys
import sys
  
# adding Folder_2/subfolder to the system path
sys.path.insert(0, '/home/amninder/Desktop/project/Folder_2/subfolder')
  
# importing the hello
from new import hello
  
# calling hello function
hello()


如果我们只是试图从Folder_2进口模块1,我们将遇到以下错误。

主文件

蟒蛇3

# importing module1 from another folder
import Folder_2
  
# calling odd_even function
module1.odd_even(5)

输出:

错误

ModuleNotFoundError ,因为默认情况下Python解释器只会检查当前目录中的文件,我们需要手动设置文件路径以从另一个目录导入模块。我们可以使用各种方法来做到这一点。下面将详细讨论这些方式。

使用 sys 模块

我们可以使用sys.path将新的不同文件夹(我们要导入模块的文件夹)的路径添加到系统路径中,以便Python也可以在该目录中查找模块,如果它没有找到模块在其当前目录中。由于sys.path属于列表类型类,因此我们可以轻松使用 insert 方法添加文件夹路径。

蟒蛇3

# importing sys
import sys
  
# adding Folder_2 to the system path
sys.path.insert(0, '/home/amninder/Desktop/Folder_2')
  
# importing the add and odd_even 
# function
from module1 import odd_even, add
  
# calling odd_even function
odd_even(5)
  
# calling add function
print("Addition of two number is :", add(2, 2))

输出



使用系统

使用 PYTHONPATH环境变量

同理,如果不想使用sys模块来设置新目录的路径。您可以为 PYTHONPATH 变量分配一个目录路径,并且仍然可以使您的程序正常工作。

在Linux中,我们可以在终端中使用如下命令来设置路径:

在 Windows 系统中:

要查看 PYTHONPATH 变量是否包含新文件夹的路径,我们可以使用以下命令:

蟒蛇3

# importing the add and odd_even function
from module1 import odd_even, add
  
# calling odd_even function
odd_even(5)
  
# calling add function
print("Addition of two number is :", add(2, 2))

输出:

使用 Python 路径

假设我们有一个这样的目录结构:



- project
    - Folder_1
        - main.py
    - Folder_2
        - subfolder
            - new.py

现在,您要将new.py模块从Folder_2导入到我们项目的 Folder_1 main.py文件中。

句法:

蟒蛇3

# importing sys
import sys
  
# adding Folder_2/subfolder to the system path
sys.path.insert(0, '/home/amninder/Desktop/project/Folder_2/subfolder')
  
# importing the hello
from new import hello
  
# calling hello function
hello()

输出:

输出