Maison  >  Article  >  développement back-end  >  Qu'est-ce que le package en python ? Qu'est-ce que ça fait ? Introduction aux packages en python

Qu'est-ce que le package en python ? Qu'est-ce que ça fait ? Introduction aux packages en python

不言
不言avant
2018-11-20 16:10:577538parcourir

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__.py

import 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)
Créez la structure des répertoires

Nous ajoutons quelques méthodes. chaque dossier :

#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)
Nous pouvons utiliser le contenu du package dans test.py, et nous pouvons l'utiliser lors de l'importation du package Le formulaire d'importation ou depuis xxx import xxx

import glance.db.models
glance.db.models.register_models('mysql')
from glance.api.policy import get
get()
Cependant, attention : sous la forme de from xxx import xxx, "point" ne peut pas apparaître après l'importation. En d'autres termes, from a.b import c est ok.

Mais from a import b.c c'est faux

3. Que fait __init__.py ?

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.py
print("我是glance的__init__.py⽂件. ")
x = 10
def hehe():
    print("我是呵呵")
    
def haha():
    print("我是哈哈")
__all__ = ['x', "hehe"]

4. Importation relative et importation absolue
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ément
ModuleNotFoundError: No module named 'versions'

Le coup d'œil importé ne peut rien faire pour le moment car il n'y a pas de chargement de sous-packages dans __init__.py Pour le moment, nous devons introduire séparément le package. contenu des sous-packages dans __init__.py .

1. Utilisez des chemins relatifs
# 在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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer