30, paquete y subpaquete de importación de Python

Primero creamos un paquete. El llamado paquete es crear un directorio con un archivo __init__.py.
Creamos un directorio mypack en el directorio común y creamos los siguientes 3 archivos .py en este directorio:

# mypack/__init__.py
print("mypack init")
def init():
	print("mypack init function")
# mypack/video.py
print("video module")
def view():
	print("video view")
# mypack/audio.py
print("audio module")
def play():
	print("play audio")

Archivo de prueba testpack.py: Se
Inserte la descripción de la imagen aquí
informó un error, no se pudo encontrar el paquete myapck, porque el paquete no está en el mismo nivel de directorio que el archivo fuente actual, ¿qué debo hacer?
Agregue la ruta de búsqueda a través de sys.path.insert:

# 系统模块
import sys
# print(sys.path)
# 添加模块的查找路径,包的查找路径和模块的是一致的
sys.path.insert(0, "../common/")

Luego puede llamar a la función de inicialización en __init__.py, pero se encuentra un error en el archivo en ejecución testpack.py:
Inserte la descripción de la imagen aquí

Importe los módulos en el paquete:

  • No podemos simplemente importar el paquete, de lo contrario, no se puede encontrar el módulo, por lo que debemos importar el nombre del módulo específico en el paquete:
    Inserte la descripción de la imagen aquí

También hay un método de importación:

Solo se introduce el espacio de nombres del paquete mypack, lo que significa que todo lo que está bajo el espacio de nombres mypack se incluye en el espacio de nombres de nuestro módulo principal actual __main__:

# 还有一种导入方法
from mypack import audio
audio.play()

Inserte la descripción de la imagen aquí

  • Si queremos introducir todo el audio directamente en el espacio de nombres, ¿qué debemos hacer?
# 引入包和模块的命名空间
# from mypack.audio import *
from mypack.audio import play
play()

Inserte la descripción de la imagen aquí
Tenga en cuenta el asterisco *:

from mypack import *

Este método no importa todos los módulos del paquete, es decir, el video y el audio no se importan, este método solo importa todas las funciones y miembros en __init__.py.

  • ¿Qué pasa si quiero cotizar directamente todos los módulos del paquete y todo lo que debería cotizar?
    Necesita definir una variable __all__ en __init__.py, y luego, cuando Python se ejecuta desde mypack import *, puede saber qué módulos importar:
# mypack/__init__.py
print("mypack init")
# import * 的时候需要载入的模块
__all__ = ["audio", "video", "openGL"]
def init():
	print("mypack init function")

Modifique el archivo testpack.py de la siguiente manera:
Inserte la descripción de la imagen aquí


  • Importar subpaquete

# 子包 mypack/sub/pydir.py
def pydir():
	print("pydir")

Inserte la descripción de la imagen aquí

El paquete contiene varios módulos y los módulos contienen varias funciones, clases y variables.

Paquete -> Módulo -> Función, Clase, Variable

Supongo que te gusta

Origin blog.csdn.net/zhaopeng01zp/article/details/109303320
Recomendado
Clasificación