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
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:
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:
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()
- 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()
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:
# 子包 mypack/sub/pydir.py
def pydir():
print("pydir")
El paquete contiene varios módulos y los módulos contienen varias funciones, clases y variables.
Paquete -> Módulo -> Función, Clase, Variable