Maison  >  Questions et réponses  >  le corps du texte

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>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>
P粉566048790P粉566048790447 Il y a quelques jours472

répondre à tous(2)je répondrai

  • P粉827121558

    P粉8271215582023-08-22 14:11:27

    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.

    répondre
    0
  • P粉604507867

    P粉6045078672023-08-22 09:39:36

    Oui. Vous ne l'utilisez pas comme package.

    python -m pkg.tests.core_test

    répondre
    0
  • Annulerrépondre