Maison >développement back-end >Tutoriel Python >Quelles sont les différences d'invocation lors de l'exécution de code Python avec -m ?

Quelles sont les différences d'invocation lors de l'exécution de code Python avec -m ?

DDD
DDDoriginal
2024-10-22 21:28:30878parcourir

What are the Differences in Invocation when Executing Python Code with -m?

Comprendre les différences d'invocation dans l'exécution de code Python avec -m

L'interpréteur Python fournit l'option -m, qui vous permet d'exécuter des modules de bibliothèque en tant que scripts dans le module __main__. Cette approche diffère de l'exécution directe de scripts sans l'option -m, ce qui entraîne certaines distinctions et implications.

Différences pratiques

Lors de l'utilisation de -m, Python gère les packages différemment. Si vous essayez d'exécuter un package sans -m, l'interpréteur le traitera comme un script normal. En revanche, avec -m, les packages peuvent être importés et les importations relatives considéreront correctement le package comme point de départ.

Par exemple, considérons le code suivant dans a.py :

<code class="py">if __name__ == "__main__":
    print(__package__)
    print(__name__)</code>

L'exécution de python a.py donne :

None
__main__

Alors que l'utilisation de python -m a donne :

""
__main__

Ici, la variable __package__ est vide dans le premier cas car le fichier est exécuté comme un script. Avec -m, __package__ est défini sur une chaîne vide puisque le module n'est pas dans un package.

Explication de package et nom

Pour __package__ :

  • Pour les scripts exécutés sans -m, __package__ est défini sur Aucun car ils ne peuvent pas être des packages.
  • Pour les modules exécutés avec -m qui se trouvent dans packages, __package__ est défini sur le nom du package.

Pour __name__ :

  • Il fait référence au module main créé lors de l'exécution de scripts.
  • Pour les packages exécutés avec -m, il fait référence à l'espace de noms global stocké dans sys.modules['__main__']. Le module main d'un package est exécuté lors de l'exécution du package avec -m.

Implications pour l'exécution du package

Exécution d'un package en tant que script avec -m nécessite un module __main__.py dans le package. Ce module sert de point d'entrée lorsque Python exécute le package à l'aide du commutateur -m.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn