Как импортировать пакет python в pytest, используя относительный импорт - PullRequest
1 голос
/ 05 марта 2020
my-proj
├── src
│   ├── main.py
└── test
│   ├── my_tests.py

У меня есть указанная выше структура каталогов для моего python проекта. У меня есть несколько юнит-тестов в my_test.py, и когда я запускаю их, я получаю следующую ошибку, используя следующие операции импорта:

import os, sys
import json
from ..src import main
import unittest

, работающий так из каталога my-proj / test /: python my_tests.py

из ..sr c import main

ValueError: попытка относительного импорта за пределы пакета верхнего уровня

Извиняюсь, если на это был дан ответ, но я попробовал несколько вещей, даже включил __main __.py в обе директории (sr c и test), но не сработал. Любая идея, как я могу заставить это работать? Это FLASK приложение в python (main.py)

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Вы также можете написать следующее в my_tests.py файле

import sys
sys.path.append("../src/")
import main
0 голосов
/ 05 марта 2020

__main__.py не влияет на пакеты, только вы можете запустить python -m pkg. Вы, вероятно, думаете о __init__.py, который делает каталог пакетом.

В целом, было бы лучше хранить тесты в структуре каталогов вместе с исходными файлами, а не в отдельной структуре. Таким образом, pytest src/, как обсуждалось, например, здесь будет просто работать. (Вам может понадобиться установить conftest.py в src/, чтобы Py.test распознал его как источник root и исправил все соответствующим образом.)

Другой способ - создать пакет правильно устанавливается (setup.py, et c.) , затем установите его в режиме разработки, используя pip install -e ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...