Python - 从不同目录导入模块
在处理大型项目时,我们可能会遇到想要从不同目录导入模块的情况。但由于某种原因,模块可能无法正确导入。如果您的模块未正确导入,请不要担心。在本文中,我们将讨论从另一个目录导入模块的方法。
注意:模块只是一个以.py扩展名结尾的Python程序,包含模块的文件夹成为一个包。
导入模块
让我们假设,我们有两个不同的文件夹,一个包含main.py这是我们主要的Python文件,我们想从Folder_2进口模块1。
目录结构
- Folder_1
- main.py
- Folder_2
- module1.py
Module1包含两个名为add和odd_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中,我们可以在终端中使用如下命令来设置路径:
export PYTHONPATH=’path/to/directory’
在 Windows 系统中:
SET PYTHONPATH=”path/to/directory”
要查看 PYTHONPATH 变量是否包含新文件夹的路径,我们可以使用以下命令:
echo $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))
输出:
假设我们有一个这样的目录结构:
- project
- Folder_1
- main.py
- Folder_2
- subfolder
- new.py
现在,您要将new.py模块从Folder_2导入到我们项目的 Folder_1 main.py文件中。
句法:
from project.folder.subfolder.filename import functionname
蟒蛇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()
输出: