Maison  >  Questions et réponses  >  le corps du texte

[Python Newbie] Interrogé sur l'importation de packages imbriqués

Premier coup d'œil à la structure des répertoires de mon package :

Le nom du package le plus externe est Msgnew, qui contient un fichier init. Il existe un module appelé get et un sous-package appelé Msg. Entrez le sous-package Msg et vous pouvez voir qu'il existe également un fichier init et qu'il y en a. Il contient 2 modules, l'un s'appelle Sendmsg et l'autre s'appelle module Receiver

.

Je souhaite maintenant importer le module Sendmsg dans le sous-package et utiliser l'une de ses fonctions
Au fait, permettez-moi de vous présenter le module Sendmsg, qui a en fait trois fonctions, comme le montre la figure :

Le code du processus d'importation est le suivant :

# -*- coding:gb2312 -*-
# 代码1
from Msgnew import Msg
Msg.Sendmsg.test1()

# 代码2
#from Msgnew.Msg import Sendmsg
#Sendmsg.test1()

Voici le code 1 et le code 2
Le résultat de l'exécution du code 1 est le suivant :

Commentez ensuite le code 1 puis exécutez le code 2. Le résultat est le suivant :

Je ne comprends pas beaucoup cela,


Les deux morceaux de code dans la case rouge ne sont-ils pas équivalents ?
À mon avis, ces deux devraient signifier la même chose. Pourquoi l’un a-t-il tort et l’autre raison ?

phpcn_u1582phpcn_u15822667 Il y a quelques jours743

répondre à tous(2)je répondrai

  • 大家讲道理

    大家讲道理2017-06-30 09:56:57

    Bien qu'il s'agisse tous de sous-modules, leur logique d'implémentation est en réalité différente, ce qui conduit au fait que l'importation finale doit être un Python文件,而并非一个模块目录,所以代码二中import Sendmsg部分才是真正的引入了这个Python文件,而前面的from Msgnew.Msg qui indique à l'analyseur où trouver le fichier Sendmsg.

    répondre
    0
  • 某草草

    某草草2017-06-30 09:56:57

    Je sais où réside le problème que j'ai rencontré.
    Lorsque l'importation n'est pas un module mais un package, si vous souhaitez importer directement les modules à l'intérieur ensemble, vous devez écrire dans le fichier init du package :

    __all__ = ["Sendmsg","Receivemsg"]
    
    from . import Sendmsg
    from . import Receivemsg

    Comme le montre l'image :

    La prochaine fois que vous l'exécuterez, ce sera un succès !

    répondre
    0
  • Annulerrépondre