77 votes

Que signifie "exécuter le module de la bibliothèque en tant que script" avec l'option "-m" option?

Je suis nouveau sur Python (et à la programmation) et, bien documenté, je ne comprends pas ce que signifie exactement le-m directive (plus précisément dans la création d'un environnement virtuel: python3 -m venv my_env.

Aussi loin que je peux lire de la documentation, il est synonyme de "run module de la bibliothèque en tant que script": c'est en fait ce concept que je ne peux pas comprendre et qu'est-ce que la différence dans l'exécution de la commande sans l' -m.

En outre, il présente une caractéristique de Python 3?

131voto

poke Points 64398

Les modules Python sont juste des fichiers de script sont situés dans un endroit où Python peut les trouver. Comme avec tous les scripts, vous pouvez simplement exécuter directement si vous savez où ils sont, par exemple, python /path/to/module.py.

Correctement conçu des modules généralement rien de moins que de définir les trucs (par exemple, les fonctions et les types que vous pouvez importer), mais, généralement, ils n'auront pas visible sur le côté effet. C'est pourquoi vous pouvez faire import sys et rien ne se passe.

Cependant, certains modules peuvent offrir des trucs utiles quand ils sont exécutés à partir de la ligne de commande. Exemples pour qui incluent venv mais aussi http.server ou idlelib: Tous ceux qui sont réguliers, des modules qui peuvent être importés à partir d'autres modules sans effets secondaires.

Mais lorsqu'il est exécuté directement, ils font tous des choses (par exemple, venv met en place un environnement virtuel, http.server exécute un simple serveur HTTP, et idlelib s'exécute en veille). Ceci est habituellement fait avec le cocher suivantes:

if __name__ == '__main__':
    print('Module is being executed directly, so do stuff here')

C'est une façon spéciale de la reconnaissance d'un script/module est exécuté directement, ou si c'est juste être importés à partir d'un autre module. Vous pouvez en apprendre plus sur la question "Qu'est - if __name__ == '__main__': faire?".

Ainsi, vous pouvez exécuter un module directement à l'aide d' python /path/to/module.py comme nous l'avons établi avant de. Mais cela nécessite de connaître le chemin d'accès complet pour le module. C'est là que l' -m option entre en jeu: Pour les modules qui peuvent généralement être importés en utilisant simplement import modulename, vous pouvez utiliser python -m modulename pour exécuter ce module directement. Tout comme si vous avez tapé le chemin d'accès complet.

Ainsi, pour notre exemple ci-dessus, nous pouvons utiliser un python -m venv, python -m http.server. ou python -m idlelib.

0voto

P.Madhukar Points 302

Ce n'est pas une propriété de python3. Vous devez utiliser -m dans le cas de modules de script. Disons par exemple que vous avez la structure de dossier comme ceci

|-HelloModule
  |_ __init__.py
  |_ hellomodule.py
|_ first_script.py

Maintenant, si vous utilisez une classe ou d'une fonction ou n'importe quel objet de first_script.py en hellomodule.py ensuite, vous devez exécuter l'hellomodule.py en tant que module la commande sera changé

python -m HelloModule/hellomodule

et vous devez exécuter cette commande à partir de l'extérieur de la HelloModule répertoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X