Le contenu de cet article concerne ce qu'est le package en python ? Qu'est-ce que ça fait ? L'introduction de packages en python a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère que cela vous sera utile.
1. Qu'est-ce qu'un package ?
Le package est un moyen d'organiser l'espace de noms du module python via ".nom du module". être appelé un package.
Mais veuillez noter qu'il est spécifié dans python2 Le fichier __init__.py doit exister à l'intérieur du package.
Le but de. créer un package ne consiste pas à exécuter, mais à être importé et utilisé. Un package n'est qu'un formulaire, et l'essence d'un package est un module.
2. >
Package Il s'agit essentiellement d'un dossier, donc la seule fonction d'un dossier est d'organiser les fichiers. À mesure que de plus en plus de fonctions sont écrites, nous ne pouvons pas mettre toutes les fonctions dans un seul dossier, nous utilisons donc des modules. aux fonctions d'organisation, comme il y a de plus en plus de modules, nous devons utiliser des dossiers pour organiser les fichiers de modules afin d'améliorer la structure et la maintenabilité du programme Suivant Créer des packages pour un apprentissage ultérieur. . Les packages sont faciles à créer. Vous avez seulement besoin d'un dossier avec __init__.pyimport os os.makedirs('glance/api') os.makedirs('glance/cmd') os.makedirs('glance/db') l = [] l.append(open('glance/__init__.py','w')) l.append(open('glance/api/__init__.py','w')) l.append(open('glance/api/policy.py','w')) l.append(open('glance/api/versions.py','w')) l.append(open('glance/cmd/__init__.py','w')) l.append(open('glance/cmd/manage.py','w')) l.append(open('glance/db/__init__.py','w')) l.append(open('glance/db/models.py','w')) map(lambda f:f.close() ,l)
#policy.py def get(): print('from policy.py') #versions.py def create_resource(conf): print('from version.py: ',conf) #manage.py def main(): print('from manage.py') #models.py def register_models(engine): print('from models.py: ',engine)
import glance.db.models glance.db.models.register_models('mysql') from glance.api.policy import get get()
Quelle que soit la méthode utilisée pour importer un package, chaque fois qu'un package ou toute autre partie du package est importé pour le la première fois, le fichier __init__.py sera exécuté en premier
Ce fichier peut être vide, mais il peut également stocker du code d'initialisation.
Il en va de même pour l'importation from xxx * que nous avons utilisée auparavant. être utilisé pour les appels de packages ?
Oui, nous devons donner __all__ dans le fichier __init__.py pour déterminer le contenu de l'importation *.
test.pyprint("我是glance的__init__.py⽂件. ") x = 10 def hehe(): print("我是呵呵") def haha(): print("我是哈哈") __all__ = ['x', "hehe"]
from glance import * print(x) # OK hehe() # OK haha() # 报错. __all__⾥没有这个⻤东⻄
Notre aperçu final du package est écrit pour que d'autres puissent l'utiliser, puis en un coup d'œil, il sera également nécessaire de s'importer mutuellement à l'intérieur du package à ce moment-là. , il existe deux méthodes d'importation : l'importation absolue et l'importation relative
1). Importation absolue : un coup d'œil comme point de départ
2). point de départ
. Par exemple, nous utilisons ⽤glance/cmd/manage.py
dans look/api/version.py Nous devons faire attention lorsque nous testons le chemin du package python. est lié au répertoire où se trouve le script en cours d'exécution.# 在glance/api/version.py #绝对导⼊ from glance.cmd import manage manage.main() #相对导⼊ # 这种情形不可以在versions中启动程序. # attempted relative import beyond top-level package from ..cmd import manage manage.main()
En python, vous n'êtes pas autorisé à exécuter un programme qui dépasse la portée du package actuel (importation relative).
Si vous utilisez l'importation absolue, ce problème n'existe pas. Autrement dit, si vous utilisez l'importation relative dans le package, alors lorsque vous utilisez les informations contenues dans le package, vous ne pouvez les importer qu'en dehors du package
# 在policy.py import versions
Si le point d'entrée de notre programme est la politique, alors il n'y aura aucun problème avec le programme pour le moment. Mais si nous importons la politique en dehors du regard, une erreur sera signalée. La raison est que lors de l'accès à la stratégie depuis l'extérieur, le chemin dans .sys.path est à l'extérieur. Le module versions ne peut donc pas être trouvé directement. Une erreur sera donc certainement signalée :
Lorsque nous faisons une erreur lors de l'importation d'un package, nous devons d'abord regarder sys.path pour voir si nous pouvons vraiment obtenir les informations sur le package
5. . Importez un package séparémentModuleNotFoundError: No module named 'versions'
# 在test.py中 import glance
2. Utilisez des chemins absolus
Notes sur les packages :
Importer les instructions liées aux packages sont également import. et from xxx import xxx, mais peu importe laquelle est utilisée, peu importe où elle se trouve, un principe doit être suivi lors de l'importation : tout ce qui comporte un point lors de l'importation, le côté gauche du
dot doit être un package . Sinon, une erreur sera signalée. Vous pouvez apporter une série de points. Par exemple : from a.b.c import d.
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!