python模块导入:同级、下级、上级、隔壁级
目录
[TOC]
更新,记录一下这个方法
貌似可以解决一切疑难杂症
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
一、导入同级模块
在Python中,导入同级模块(即同一个文件夹中的.py文件)非常简单,只需直接导入即可。
import file1
例如,在file2.py
中想要导入file1.py
,无需添加文件后缀.py
,只需指定模块的名称即可。
目录结构:
dir1
├── file1.py
├── file2.py
├── dir3
│ ├── __init__.py
│ └── file3.py
└── dir4
├── __init__.py
└── file4.py
二、导入下级模块
导入下级目录中的模块也很容易,需要在下级目录中新建一个空白的 __init__.py
文件,然后使用相对导入方式导入目标模块。
在file1.py
中想要导入dir3
下的file3.py
,首先在dir3
目录中新建一个空白的 __init__.py
文件,然后可以使用以下语句导入目标模块:
from dir3 import file3
或者可以使用以下语句进行导入:
import dir3.file3
请注意,如果使用第二种方式,需要一直带着路径dir3
来书写,较为冗长。建议为导入的目标模块使用一个别名。
目录结构:
dir1
├── file1.py
├── file2.py
├── dir3
│ ├── __init__.py
│ └── file3.py
└── dir4
├── __init__.py
└── file4.py
三、导入上级模块
要导入上级目录下的模块,可以使用 sys.path
。首先将上级目录添加到 sys.path
中,然后使用绝对导入方式导入目标模块。
例如,在file4.py
中想要导入上级目录下的file2.py
,首先将上级目录添加到 sys.path
中,然后使用以下语句导入目标模块:
import sys
sys.path.append("..")
import file2
这样,就可以成功导入上级目录下的模块。
目录结构:
dir1
├── file1.py
├── file2.py
├── dir3
│ ├── __init__.py
│ └── file3.py
└── dir4
├── __init__.py
└── file4.py
四、导入隔壁文件夹中的模块
如果想要导入隔壁文件夹中的模块,可以将上级目录添加到 sys.path
中,并使用相对导入方式导入目标模块。
假设有如下目录结构:
dir1
├── file1.py
├── file2.py
├── dir3
│ ├── __init__.py
│ └── file3.py
└── dir4
├── __init__.py
└── file4.py
在file3.py
中,想要导入dir4
目录下的file4.py
,可以使用以下代码:
import sys
sys.path.append("..")
from dir4 import file4
这样,就可以成功导入隔壁文件夹中的目标模块。
五、关于__init__.py
__init__.py
是一个Python包(package)中的特殊文件,它用于标识该目录为一个包,并在导入该包时执行一些初始化操作。
当你创建一个包时,通常会在该包的根目录中包含一个名为__init__.py
的文件。这个文件可以是一个空文件,也可以包含一些代码。这个文件的存在告诉Python解释器这个目录是一个包,可以被导入和使用。
__init__.py
文件可以用于多种用途。以下是一些常见的用途:
- 定义包的初始化逻辑:你可以在
__init__.py
文件中编写代码来执行包的初始化操作,例如设置全局变量、导入子模块或执行其他必要的配置。 - 控制导入的内容:你可以在
__init__.py
文件中明确指定包导入时应该导入哪些模块或子包。这样可以控制包的使用方式,使得在导入时只暴露出必要的接口,而隐藏其他实现细节。 - 提供包级别的功能:在
__init__.py
文件中,你可以定义一些函数或类,供包的用户直接使用,而不需要导入特定的模块。
举个例子,假设你有一个名为my_package
的包,其目录结构如下:
my_package
├── __init__.py
├── module1.py
└── module2.py
在__init__.py
文件中,你可以写入以下代码:
print("Initializing my_package...")
# 导入module1和module2
from . import module1
from . import module2
# 定义一个包级别的函数
def package_function():
print("This is a package-level function.")
print("my_package initialized successfully.")
当你导入my_package
时,__init__.py
中的代码将会执行。这会打印出初始化信息,并导入module1
和module2
模块。你也可以直接调用my_package.package_function()
来使用包级别的函数。