Я хочу знать, как правильно импортировать файл в мой тестовый файл, не используя __init__.py
в тестовой корневой папке.Последнее предложение этой статьи гласит, что в каталоге test
не должно быть файла init
.
Я не знаю много о питоне, поэтому мне хотелось бы знать: 1) Почему бы не 2) Как импортировать файл tested.py
в test_main.py
, чтобы проверить его функциональность без использования init
файл как скрипт, который вставляет пути к PYTHONPATHS?Мой проект имеет следующую структуру
.
├── __init__.py
├── my
│ ├── __init__.py
│ ├── main.py
│ └── my_sub
│ ├── __init__.py
│ └── tested.py
└── test
└── test_main.py
Файлы содержат следующий код
#/Python_test/__init__.py
import my.main
#/Python_test/my/__init__.py
#empty
#/Python_test/my/main.py
from .my_sub.tested import inc
print(inc(5))
#/Python_test/my/my_sub/__init__.py
#empty
#/Python_test/my/my_sub/tested.py
def inc(x):
return x+1
#/Python_test/test/test_main.py
from Python_pytest.my.my_sub.tested import func
def test_answer():
assert func(3) == 3
Когда я запускаю код из командной строки python __init__.py
, он печатает 6, что правильно.
Я бы хотел проверить функцию inc()
в файле tested.py
.1. Я установил pytest
пакет в качестве среды тестирования,
2. создал тестовый файл, похожий на тот, что описан в руководстве здесь и называется test_main.py
.3. Добавлен __init__.py
с кодом, который находит путь к корневому каталогу и добавляет его к sys.path
. Он работал хорошо, но потом я прочитал, что этого делать не следует.Но как это сделать?Мне трудно читать какой-то проверенный модулем код из некоторых репозиториев github, которые протестированы и не используют файл инициализации.(один из них boto3 ) Я не могу найти подсказку, которая подсказывает, как правильно его использовать.
Я также пытался использовать относительный импорт таким образом
from ..my.main import func
но бросает ValueError: attempted relative import beyond top-level package.
Что нормально.Но я все равно попробовал.
Теперь я не знаю, как это сделать.В руководствах по импорту обычно указывается, что мы должны добавить пути к импортированным модулям в sys.path
(если их еще нет), но как мне это сделать, если не должно быть файла init
, который может содержать функциональность?