Importer des notes d'étude en python
Avant-propos
Il existe deux façons d'organiser les modules en python, l'une est un simple fichier python, le nom du fichier est le nom du module, l'autre est un package, un package est un répertoire contenant plusieurs fichiers python . Il doit y avoir un fichier __init__.py dans le répertoire, donc le nom du répertoire est le nom du module. Les fichiers python du package peuvent également être importés via la syntaxe nom du package.file name import
import. 🎜>
import Module import Module as xx
from Module import Name from Module immport Name as yy
├── A.py └── pkg ├── B.py └── __init__.py
import A import pkg import pkg.B from pkg import B
Mais une erreur sera signalée dans la situation suivante
#filename: A.py from B import BB class AA:pass #filename: B.py from A import AA class BB:pass
pkg ├── __init__.py └── file.py
argument = 0 class A:pass
>>> import pkg >>> import pkg.file >>> from pkg import file >>> from pkg import A >>> from pkg import argument
>>> import pkg.A >>> import pkg.argument
La structure des répertoires est la suivante
app ├── __inti__.py ├── mod1 │ ├── file1.py │ └── __init__.py ├── mod2 │ ├── file2.py │ └── __init__.py └── start.py
Le contenu de app/start.py est import mod1.file1
app/mod1 /file1.py content Pour from ..mod2 import file2
Afin de faciliter l'analyse, nous ajoutons print __file__, __name__
à la première ligne de tous les fichiers py (y compris __init__.py) maintenant app/mod1/file1. L'importation relative est utilisée dans py. Lorsque nous exécutons python file1.py sous app/mod1 ou exécutons python mod1/file1.py sous app, l'erreur ValueError : tentative d'importation relative dans un non-package
.sera signalé lors de l'exécution sous app. python -m mod1.file1 ou python start.py signalera une erreur ValueError : tentative d'importation relative au-delà du package de niveau supérieur
Les raisons spécifiques seront discutées plus tard. regardez quelques règles lors de l'importation de modules
Lorsque la structure du package n'est pas explicitement spécifiée, python détermine la structure d'un module dans le package en fonction de __name__ S'il s'agit de __main__, c'est le module de niveau supérieur lui-même et. n'a pas de structure de package. S'il s'agit de la structure A.B.C, alors le module de niveau supérieur est A.
Suivez essentiellement ce principe
S'il s'agit d'une importation absolue, un module ne peut importer que ses propres sous-modules ou modules et sous-modules au même niveau que son module de niveau supérieur
S'il s'agit d'une importation relative, un module doit avoir une structure de package et ne peut importer des modules qu'à l'intérieur de son module de niveau supérieur
La structure des répertoires est la suivante
A ├── B1 │ ├── C1 │ │ └── file.py │ └── C2 └── B2
其中A,B1,B2,C1,C2都为包,这里为了展示简单没有列出__init__.py文件,当file.py的包结构为A.B1.C1.file(注意,是根据__name__来的,而不是磁盘的目录结构,在不同目录下执行file.py时对应的包目录结构都是不一样的)时,在file.py中可采用如下的绝对的导入
import A.B1.C2 import A.B2
和如下的相对导入
from .. import C2 from ... import B2
什么情况下会让file.py的包结构为A.B1.C1.file呢,有如下两种
在A的上层目录执行python -m A.B1.C1.file, 此时明确指定了包结构
在A的上层目录建立文件start.py,在start.py里有import A.B1.C1.file,然后执行python start.py,此时包结构是根据file.py的__name__变量来的
再看前面出错的两种情况,第一种执行python file1.py和python mod1/file1.py,此时file.py的__name__为__main__ ,也就是说它本身就是顶层模块,并没有包结构,所以会报错
第二种情况,在执行python -m mod1.file1和python start.py时,前者明确告诉解释器mod1是顶层模块,后者需要导入file1,而file1.py的__name__为mod1.file1,顶层模块为也mod1,所以在file1.py中执行from ..mod2 import file2时会报错 ,因为mod2并不在顶层模块mod1内部。通过错误堆栈可以看出,并不是在start.py中绝对导入时报错,而是在file1.py中相对导入报的错
那么如何才能偶正确执行呢,有两种方法,一种是在app上层目录执行python -m app.mod1.file1,另一种是改变目录结构,将所有包放在一个大包中,如下
app ├── pkg │ ├── __init__.py │ ├── mod1 │ │ ├── __init__.py │ │ └── file1.py │ └── mod2 │ ├── __init__.py │ └── file2.py └── start.py
start.py内容改成import pkg.mod1.file1,然后在app下执行python start.py
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如有疑问大家可以留言交流。
更多python中import学习备忘笔记相关文章请关注PHP中文网!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Les expressions régulières sont des outils puissants pour la correspondance des motifs et la manipulation du texte dans la programmation, améliorant l'efficacité du traitement de texte sur diverses applications.

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H
