У меня есть проект Python (3.6.3), который имеет следующую структуру
setup.py
utils #python package
utils/constants.py
utils/name_reports.py
normalization #python package
normalization/resolve_name.py
categorization #python package
categorization/animal_categories.py
Вы можете найти исходный код здесь на github - https://github.com/techmango-org/python-import-resolution
Вот исходный код для utils/name_reports.py
import normalization.resolve_name as rn
import categorization.animal_categories as ac
test_name = 'DOGY'
resolved_name = rn.get_animal_name(test_name)
print('********ANIMAL CATEGORY IS:', ac.get_animal_score(resolved_name))
Когда я запускаю python utils/name_reports.py
, я получаю следующее исключение
Traceback (most recent call last):
File "utils/name_reports.py", line 1, in <module>
import normalization.resolve_name as rn
ModuleNotFoundError: No module named 'normalization'
Я попытался решить эту проблему, установив текущий пакет в пакеты виртуального сайта env, запустив pip install .
, но это означает, что для каждого локального изменения мне нужно запускать pip install --upgrade .
, чтобы переместить мои локальные изменения в пакеты сайта.
Я использовал хак -m unittest
, чтобы решить эту проблему. Проверьте этот скриншот
Но я не могу понять, какую разницу это создает. Вот точные вопросы -
- Как решить проблему импорта python в этой ситуации?
- Есть ли лучший подход к структурированию кода Python, чтобы мы не сталкивались с проблемой относительного импорта?
- Какую разницу создает
-m unittest
, которая решает эту проблему?