Alors, voici mon (ok .. désordre) dir:python 101 - le meilleur moyen d'accéder à un module de dossier parent
.
├── app
│ ├── __init__.py
│ ├── analyze_text.py
│ ├── images.py
│ ├── main.py
│ ├── messages.py
│ ├── process_text.py
│ ├── requirements.txt
│ ├── response.py
│ └── tests
│ ├── __init__.py
│ ├── analyze_text_test.py
│ ├── test_process_text.py
│ └── unit_tests.py
└── setup.py # no idea what's going on with this
Tout ce que je veux faire est, il suffit d'utiliser
from analyze_text import AnalyzeText
dans le fichier de analyze_text_test.py sans voir
« vous êtes un idiot et vous ne savez pas ce que vous faites » dans le terminal .. aka:
ImportError: No module named (whatever)
Je trouve cette solution:
https://stackoverflow.com/a/11158224/2738183
import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0,parentdir)
import mymodule
Ce qui fonctionne, mais il est Janky.
Pourquoi?
.. Parce que
Je l'utilise d'une manière Janky. Je ne veux pas devoir recoller ce code à chacune de mes unittests dans le dossier de tests (qui sont dans des fichiers différents.)
(Donc, si je le colle une fois dans init .py «Vous obtenez une erreur, mais j'ai essayé au hasard de voir ce qui s'est passé)
Alors, quelle est la manière la plus élégante d'aborder ce problème? (Sans repasting code (ou tout simplement le coller dans une fonction et de l'appeler plusieurs fois))
Edit: Les commentaires ont jusqu'à présent rien résolu, donc je vais essayer de faire un peu plus clair . J'ai trouvé une solution qui fonctionne. Donc, dans chaque fichier dans le répertoire de tests, je dois recoller cette solution (ou appeler la même fonction autant de fois qu'il y a de fichiers.) C'est exactement ce que j'essaie d'éviter. Je voudrais une solution qui puisse s'appliquer à tous les fichiers du répertoire de test afin que je puisse utiliser les importations du répertoire parent comme d'habitude, au lieu d'ajouter le chemin parent dans chacun de ces fichiers.
Est-ce que 'from ..analyze_text import AnalyzeText' fonctionne? –
Je vais modifier pour inclure cette information. Je pensais que je l'ai déclaré. –
Quelle erreur obtenez-vous si vous mettez les lignes 'sys.path.insert' dans votre __init__.py?devrait fonctionner aussi loin que je sais –