Защо мога да импортирам модул в дебъгер след добавяне на __init__.py към папката tests на pytest

Използвам Python 3.6.5 и тествам с py.test.

Имах следната структура на тестовата си папка.

tests/
    some_folder/
        test_module.py
    utils.py

В test_module.py импортирам utils.py, за да използвам някои функции от там. В test_module.py имам тестова функция, която работи перфектно, когато я изпълня, но когато се опитам да я отстраня в PyCharm, получавам

from tests import utils
ImportError: cannot import name 'utils'

Така че се опитах да конвертирам папката си с тестове в пакет и това реши проблема. Сега имам следната структура на моите тестове:

tests/
    some_folder/
        test_module.py
    __init__.py
    utils.py 

Но защо решава проблема? И защо проблемът не възниква, когато просто стартирам теста?


person Nikita Aleksandrov    schedule 31.07.2018    source източник
comment
Файловете init.py са необходими, за да може Python да третира директориите като съдържащи пакети; това се прави, за да се предотврати неволно скриване на валидни модули от директории с общо име, като например низ, които се появяват по-късно (по-дълбоко) в пътя за търсене на модула. В най-простия случай init.py може просто да бъде празен файл, но може също така да изпълни код за инициализация за пакета или да зададе променливата all, описана по-късно. За да импортирате utils.py методи в test_module.py, първо помощните средства трябва да бъдат разпознати. stackoverflow.com/questions/448271/what-is-init-py-for   -  person user2906838    schedule 31.07.2018


Отговори (1)


Това е странност на pycharm. По-добрият начин да коригирате проблема, който имате, е да маркирате папката си като корен на източника и да се уверите, че тези полета са избраниуверете се, че тези квадратчета са избрани

person krflol    schedule 31.07.2018