Explicación detallada de la importación de Python
1. Hay cuatro casos de importación de paquetes de importación
(1) Importar dentro del directorio actual
(2) Importar desde el directorio de nivel superior al directorio de nivel inferior
(3) Importar desde el directorio de nivel inferior al directorio de nivel superior
(4) Importar entre directorios del mismo nivel
La diferencia entre importar y desde importar en python:
La declaración de importación importa todos los miembros (incluyendo variables, funciones, clases, etc.) dentro de todo el módulo.
from import importa solo los miembros especificados por esta declaración.
from xxx import * Al importar módulos, es equivalente a import.
Cuando from xxx import * importa un módulo, el valor predeterminado es importar todas las unidades de programa en el módulo que no comiencen con un guión bajo.
2. Estructura del directorio
.
├── pack1
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── run1.cpython-37.pyc
│ │ └── run2.cpython-37.pyc
│ ├── run1.py
│ ├── run2.py
│ ├── samedir.py
│ └── upper.py
├── pack2
│ ├── __init__.py
│ ├── parallel.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ └── run3.cpython-37.pyc
│ ├── run3.py
│ └── run4.py
├── __pycache__
│ └── root_pack.cpython-37.pyc
├── root_pack.py
└── root.py
3. Importar en este directorio de nivel
Puede importar directamente los archivos en este directorio. samedir.py importa run1.py.
run1.py es el siguiente:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def run1():
print ("I'm running package 1")
def test_run1():
print ("I'm running package test_run1")
Esta llamada de directorio, samedir.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import run1
run1.run1()
run1.test_run1()
import run1 as r1
r1.run1()
r1.test_run1()
Resultados de la:
# python samedir.py
I'm running package 1
I'm running package test_run1
I'm running package 1
I'm running package test_run1
importar run1 como r1
simplifica la entrada y usa r1 para llamar a dos funciones
4. El directorio de nivel superior importa el directorio de nivel inferior
Para importar un archivo en un directorio de nivel inferior desde un directorio de nivel superior, debe crear un nuevo archivo __init__.py en el nivel inferior y ejecutar el archivo init primero al importar.
Por lo general, el archivo __init__.py está vacío, pero puede agregarle otras funciones. Cuando importa un paquete, en realidad importa su archivo __init__.py. De esta forma, podemos importar por lotes los módulos requeridos por el programa en el archivo __init__.py, en lugar de importarlos uno por uno.
import sys
sys.path.append("..")
Es para importar el directorio de nivel superior desde el nivel inferior.
if name == ' main ':
para probar el efecto de ejecución de la importación
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sys.path.append("..")
if __name__ == '__main__':
print ('main is running')
else:
print ('package 1 init')
root_pack.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 导入 Python 包
import pack1.run1 as t1
import pack2.run3 as t3
t1.run1()
t1.test_run1()
t3.run3()
t3.test_run3()
El efecto de ejecución es el siguiente:
# python root.py
package 1 init
package 2 init
I'm running package 1
I'm running package test_run1
I'm running package 3
I'm running package test_run3
ilustrar:
Cuando se importa paquete 1 init
paquete 2 init , primero se ejecuta el archivo init.py Para el mismo paquete, si se importa varias veces, init.py solo se ejecuta una vez.
5. El directorio de nivel inferior importa el directorio de nivel superior
Importe root_pack.py del directorio de nivel superior desde la parte superior en el directorio pack1.
root_pack.py:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def root_pack():
print ("I'm running package root")
def root_run():
print ("I'm running package root_run")
Es necesario importar los módulos en el directorio de nivel superior, usar sys.path y agregar la ruta.
superior.py:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sys.path.append("..")
import root_pack
root_pack.root_pack()
root_pack.root_run()
Efecto de ejecución:
# python upper.py
I'm running package root
I'm running package root_run
6. Importar entre directorios al mismo nivel
paralelo.py está en el directorio pack2, llamando al programa en el directorio pack1.
paralelo.py también necesita aumentar el directorio principal
import sys
sys.path.append("..")
paralelo.py es el siguiente:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sys.path.append("..")
from pack1 import run1
from pack1 import run2 as r2
run1.run1()
r2.run2()
r2.test_run2()
Resultados de la:
# python parallel.py
package 1 init
I'm running package 1
I'm running package 2
I'm running package test_run2