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文件可以用于多种用途。以下是一些常见的用途:

  1. 定义包的初始化逻辑:你可以在__init__.py文件中编写代码来执行包的初始化操作,例如设置全局变量、导入子模块或执行其他必要的配置。
  2. 控制导入的内容:你可以在__init__.py文件中明确指定包导入时应该导入哪些模块或子包。这样可以控制包的使用方式,使得在导入时只暴露出必要的接口,而隐藏其他实现细节。
  3. 提供包级别的功能:在__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中的代码将会执行。这会打印出初始化信息,并导入module1module2模块。你也可以直接调用my_package.package_function()来使用包级别的函数。

Last modification:June 4, 2023
V50%看看实力