Comment corriger l'erreur « Une tentative d'importation relative a été effectuée à partir d'un non-package même s'il y a __init__.py »
P粉566048790
2023-08-21 15:15:11
<p>J'essaie de suivre la PEP 328, en utilisant la structure de répertoires suivante : </p>
<pre class="brush:php;toolbar:false;">pkg/
__init__.py
Composants/
core.py
__init__.py
essais/
core_test.py
__init__.py</pre>
<p>Dans <code>core_test.py</code> j'ai l'instruction d'importation suivante</p>
<pre class="brush:php;toolbar:false;">from ..components.core import GameLoopEvents</pre>
<p>Cependant, lorsque j'exécute, j'obtiens l'erreur suivante : </p>
<pre class="brush:php;toolbar:false;">tests$ python core_test.py
Traceback (dernier appel le plus récent) :
Fichier "core_test.py", ligne 3, dans <module>
à partir de ..components.core importer GameLoopEvents
ValueError : tentative d'importation relative dans un fichier non-package</pre>
<p>J'ai trouvé "Le chemin relatif ne fonctionne pas même avec __init__.py" et "Importer un module à partir d'un chemin relatif" dans ma recherche, mais ils n'ont pas aidé. </p>
<p>Y a-t-il quelque chose qui me manque ici ? </p>
Pour développer la réponse de Ignacio Vazquez-Abrams :
Le mécanisme d'importation de Python est relatif au fichier actuel
__name__
。当直接执行一个文件时,它的名称不是通常的名称,而是使用"__main__"
comme nom. Par conséquent, les importations relatives ne fonctionnent pas.Comme Ignacio l'a suggéré, vous pouvez utiliser les attributs
-m
选项来执行它。如果你的包中有一部分是作为脚本运行的,你还可以使用__package__
pour indiquer quel nom le fichier doit avoir dans la hiérarchie des packages.Voir http://www.python.org/dev/peps/pep-0366/ pour plus de détails.
Oui. Vous ne l'utilisez pas comme package.