Je sais que des questions similaires ont déjà été posées ... Mais j’ai eu un rapide doute ... .__ J'ai suivi ce lien: https://www.python-course.eu/python3_packages.php
ma structure de code:
my-project
-- __init__.py
-- src
-- __init__.py
-- file1.py
-- test
-- __init__.py
-- test_file1.py
test_fichier1.py:
import unittest
from src.file1 import *
class TestWriteDataBRToOS(unittest.TestCase):
def test_getData(self):
sampleData = classInFile1()
sampleData.getData()
self.assertNotEqual(sampleData.usrname, "")
if __== '__main__':
unittest.main()
Ici je reçois l'erreur:
ModuleNotFoundError: No module named 'src'
Si je change de:
import sys
sys.path.insert(0, '../src')
import unittest
from file1 import *
alors ça marche!
Quelqu'un peut-il m'aider à comprendre pourquoi cela ne fonctionne pas, comme cela a été décrit dans le lien collé ci-dessus ou par tout autre moyen au lieu d'écrire l'instruction sys.path.insert(0, '../src')
.
Merci!
Modifier:
après avoir exécuté à partir de mon répertoire de projet: `python -m unittest test/test_file1/TestWriteDataBRToOS Je reçois le message d'erreur mis à jour ci-dessus.
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/lib/python2.7/unittest/__main__.py", line 12, in <module>
main(module=None)
File "/usr/lib/python2.7/unittest/main.py", line 94, in __init__
self.parseArgs(argv)
File "/usr/lib/python2.7/unittest/main.py", line 149, in parseArgs
self.createTests()
File "/usr/lib/python2.7/unittest/main.py", line 158, in createTests
self.module)
File "/usr/lib/python2.7/unittest/loader.py", line 130, in loadTestsFromNames
suites = [self.loadTestsFromName(name, module) for name in names]
File "/usr/lib/python2.7/unittest/loader.py", line 91, in loadTestsFromName
module = __import__('.'.join(parts_copy))
ImportError: Import by filename is not supported.
Vous devez exécuter le test à partir du dossier my-project
plutôt que du dossier test
.
python -m unittest test.test_file1.TestWriteDataBRToOS
En effet, il est impossible de localiser le module nommé "src", probablement parce que le chemin d'accès au dossier "src" n'est pas spécifié correctement. Si vous écrivez directement src.file1, votre fichier 'src' doit être présent dans le même répertoire que celui dans lequel se trouve votre fichier python actuel (test_file1.py). S'il ne se trouve pas dans le même répertoire, vous devez spécifier le répertoire entier. La raison pour laquelle sys.path.insert(0, '../src')
a fonctionné est parce que ..
vous permet de monter d’un répertoire à l’autre et c’est là que votre dossier src peut se trouver. Si vous utilisez le répertoire test_file1.py sous/usr/bin/python, le dossier src se trouve dans le répertoire/usr/bin/src et, puisqu'il n'est pas identique à votre répertoire de travail actuel, capable de localiser le module 'src'.