A: ¿Qué paquete
Apreciada: un archivo __init__.py se llama el paquete, el paquete y el paquete dentro del archivo, en general, no se llevará a cabo de forma manual, se hace referencia, y luego ejecutado por la entrada de la función unificada.
test1.py
def add1 (): print ( " add1 " )
test2.py test3.py test4.py y test1 función, los nombres de las funciones son ADD2, add3, add4, __ ini__.py está vacía
A: test2.py utilizado en test1 y ADD2 () Función
de test2 importación ADD2 def add1 (): print ( " add1 " ) ADD2 () si __name__ == ' __main__ ' : add1 () # 结果 add1 ADD2
II: Uso test3.py en test1 y ADD3 (función)
de test3 importación add3 def add1 (): print ( " add1 " ) add3 () si __name__ == ' __main__ ' : add1 () # 报错 ModuleNotFoundError: Sin módulo denominado ' test3 '
La razón es que el proceso de la ejecución test3 importación add3 es tal que, bajo el directorio actual a test1 dónde encontrar test3, después de encontrar en el uso de la función add3 interior (), pero no pudo encontrar, ya que sólo tres de directorio donde test1 archivo, tes1.py, test2.py, demo carpeta.
de demo.test3 importación add3 def add1 (): print ( " add1 " ) add3 () si __name__ == ' __main__ ' : add1 () # 结果 add1 add3
Las razones del éxito son: en primer lugar encontrar una demo en el directorio actual, y luego encontrar un test3 en el directorio demo, y finalmente encontró add3, el punto de partida del grupo de cabeza, es el directorio en el paquete de ejecución principal de este archivo, se busca encontrar no en el error.
a partir de demostración importación test3 def add1 (): print ( " add1 " ) test3.add3 () si __name__ == ' __main__ ' : add1 () # 结果 add1 add3
Este formulario también puede ir a la primera demo, demo encontrado por test3, finalmente encontró add3 ()
3: Uso en test4 test3 dentro ADD4 (función)
de test4 importación add4 # add4 Sin embargo test4 y línea ondulada son de color rojo DEF ADD3 (): Imprimir ( " ADD3 " ) add4 () SI el __name__ == ' __main__ ' : ADD3 () # consecuencia ADD3 add4
Aunque tienen éxito, pero todavía hay algunos problemas, cuando se realiza manualmente test3.py tiempo, no hay problema, que pueda salir, sino también a ser otra persona al test3 paquete cuando se usa, será un problema, no cambie test3.py
Deje test1 test3 utilizados en el interior add3 uso
a partir de demostración importación test3 def add1) (: print ( " add1 " ) test3.add3 () si __name__ == ' __main__ ' : add1 () # 报错 Rastreo (llamada más reciente pasado): archivo " C: / Users / Administrador / PycharmProjects / Sin título / test1.py "línea 1, en <módulo> de demostración importación test3 archivo " C: \ Users \ Administrator \ PycharmProjects \ sin título \ demo \ test3.py " , línea 1,en <módulo> de test4 importación add4 ModuleNotFoundError: Sin módulo denominado ' test4 '
Debido a que en este momento del paquete de guía de entrada es la carpeta en la test1 archivo, se encontró por primera vez por test3 de demostración, y luego realizar test3 dentro de la primera línea de código, desde test4 add4 importación aquí en el problema, esta vez de un archivo o carpeta en la test1 test4 encontrar, por lo que es incorrecto.
Si desea ejecutar correctamente, se puede añadir en este momento, es necesario modificar test3.py
de .test4 importación add4 def add3 (): print ( " add3 " ) add4 () si __name__ == ' __main__ ' : add3 ()
A continuación, ejecute test1.py
a partir de demostración importación test3 def add1 (): print ( " add1 " ) test3.add3 () si __name__ == ' __main__ ' : add1 () # 结果 add1 add3 add4
Las razones del éxito son: Después de introducir test3.py, la primera frase del tiempo de ejecución de código, desde add4 importación .test4, esto juega un papel muy importante, representa la carpeta de archivo actual, donde la primera lectura para encontrar test3 ... donde la carpeta de archivos py, de demostración, de demostración y luego encontrar test4 desde el interior, seguro que será un éxito.
IV: guía de paquetes __all__
__all__
Lista es una cadena, se utiliza para definir el módulo de from XXX import *
excusa para el símbolo de exportación externo, es decir, estar expuestos, pero sólo para import *
actuar sobre la from XXX import XXX
ineficaz.
Por ejemplo, para aumentar el interior __init__.py __all__ = [test3.py], a continuación, realizar test1.py
de demostración de importación * def add1 (): print ( " add1 " ) test3.add3 () si __name__ == ' __main__ ' : add1 () # 结果add1 add3 add4
de demostración de importación * def add1 (): print ( " add1 " ) test4.add4 () si __name__ == ' __main__ ' : add1 () # 结果add1 Rastreo (llamada más reciente pasado): archivo " C: / Users / Administrador /PycharmProjects/untitled/test1.py "línea 9, en <módulo> add1 () del archivo " C: /Users/Administrator/PycharmProjects/untitled/test1.py " , línea 5, en test4.add4 () add1 NameError: nombre ' test4 ' es no definido
__all__ es proteger el paquete, evite el contacto con todas las cosas, una lista de las cuales sólo nombres de los métodos especificados, se permiten los nombres de variables para ser utilizado
__Init__.py Para modificar __all __ = [ "test3", "test4"]
continuar test1.py
de demostración de importación * def add1 (): print ( " add1 " ) test4.add4 () si __name__ == ' __main__ ' : add1 () # 结果add1 add4
# TODO