Ошибка Python3.6: ModuleNotFoundError: нет модуля с именем 'src' - PullRequest
0 голосов
/ 26 июня 2018

Я знаю, что подобные вопросы задавались раньше ... Но у меня было быстрое сомнение ... Я перешел по этой ссылке: https://www.python -course.eu / python3_packages.php

моя структура кода:

my-project
  -- __init__.py
  -- src
      -- __init__.py
      -- file1.py
  -- test
      -- __init__.py
      -- test_file1.py

test_file1.py:

import unittest
from src.file1 import *

class TestWriteDataBRToOS(unittest.TestCase):
    def test_getData(self):
    sampleData = classInFile1()
    sampleData.getData()
    self.assertNotEqual(sampleData.usrname, "")

if __name__ == '__main__':
    unittest.main()

Здесь я получаю сообщение об ошибке:

ModuleNotFoundError: No module named 'src'

Если я поменяю на:

import sys
sys.path.insert(0, '../src')
import unittest
from file1 import *

тогда это работает!

Может ли кто-нибудь помочь мне понять, почему это не сработает, как это было описано в ссылке, вставленной выше, или каким-либо другим способом вместо написания sys.path.insert(0, '../src') заявления.

Спасибо!

Edit:

после выполнения из my-project dir: `python -m unittest test / test_file1 / TestWriteDataBRToOS Я получаю сообщение об ошибке, обновленное выше.

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.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Тест необходимо запустить из папки my-project, а не из папки test.

python -m unittest test.test_file1.TestWriteDataBRToOS
0 голосов
/ 26 июня 2018

Это потому, что он не может найти модуль с именем 'src', вероятно, потому что путь к папке 'src' не указан правильно. Если вы напишите src.file1 напрямую, то ваш файл 'src' должен находиться в том же каталоге, в котором находится ваш текущий файл python (test_file1.py). Если он не находится в том же каталоге, то вы должны указать весь каталог. Причина, по которой sys.path.insert(0, '../src') сработал, заключается в том, что .. переместит вас на один каталог вверх, и это может быть ваша папка src. Если вы работаете с каталогом для test_file1.py, который является / usr / bin / python, тогда местоположение вашей папки src будет / usr / bin / src, и поскольку оно не совпадает с текущим рабочим каталогом, файл python не возможность найти модуль 'src'.

...