Quel est le but du commutateur -m ?
Contexte : le problème
Considérez les deux extraits de code suivants :
python -m mymod1 mymod2.py args
Copier après la connexion
python mymod1.py mymod2.py args
Copier après la connexion
Dans les deux cas, mymod1.py est appelé et sys.argv est défini sur ['mymod1.py', 'mymod2.py', 'args']. Cela soulève la question : quel est le but du commutateur -m ?
La réponse : le rôle de -m
Le commutateur -m sert plusieurs objectifs importants :
-
Exécuter le code Python à partir de la ligne de commande : Il vous permet d'exécuter du code Python à partir de la ligne de commande en spécifiant le nom du module au lieu du nom du fichier. Ceci est utile lorsque vous connaissez le nom du module mais pas le nom du fichier, en particulier pour les modules de bibliothèque standard ou les modules tiers.
-
Ajouter un répertoire à sys.path : Python détermine les noms de fichiers des modules en fonction sur son sys.path. Le commutateur -m ajoute le répertoire actuel à sys.path, vous permettant d'importer des modules à partir du répertoire actuel.
-
Exécuter le code avec des importations relatives : Lors de l'exécution de modules avec des importations relatives à partir de la commande ligne, le commutateur -m définit la variable __package__ sur le module parent du nom de module spécifié. Cela permet aux importations relatives de fonctionner correctement.
Cas d'utilisation
Deux cas d'utilisation notables pour le commutateur -m sont :
-
Exécution de la norme Bibliothèque ou modules tiers : Si vous connaissez le nom du module mais pas le nom du fichier, vous pouvez utiliser -m pour l'exécuter depuis la ligne de commande, par exemple, python -m http.server.
-
Exécuter des packages locaux avec des importations : Vous pouvez exécuter un package local contenant des importations absolues ou relatives en utilisant -m, sans avoir à l'installer. Ceci est similaire à l'utilisation de pip install -e . en mode développement.
Comparaisons détaillées
Pour illustrer les différences entre les méthodes d'exécution des modules, voici des comparaisons détaillées :
Exécution via l'instruction d'importation :
- sys.path n'est pas modifié.
- __name__ est défini sur le nom absolu du module.
- __package__ est défini sur le package parent immédiat.
- __init__.py est évalué pour tous les packages et le module de code.
Exécution via la ligne de commande avec le nom de fichier :
- sys.path est modifié pour inclure le répertoire parent du nom de fichier.
- __name__ est défini sur '__main__'.
- __package__ est défini sur Aucun.
- __init__.py n'est évalué pour aucun package.
Exécution via la ligne de commande avec le nom du module :
- sys.path est modifié pour inclure le répertoire actuel.
- __name__ est défini sur '__main__'.
- __package__ est défini sur le package parent immédiat du nom du module.
- __init__.py est évalué pour tous les packages et le code module.
Conclusion
Le commutateur -m est un outil polyvalent qui améliore les capacités d'exécution de Python. Il permet une exécution pratique des modules, intègre des fonctionnalités d'importation et d'exécution en ligne de commande et permet l'exécution de packages locaux avec des importations relatives.
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!