Я полагаю, вы запускаете test.py
как сценарий. test.py
необходимо найти пакет project
, и два способа сделать это: сделать ваш проект доступным для установки или взломать sys.path
.
Installable
Первый немного измените структуру каталогов, чтобы проект стал подкаталогом какого-то анонимного каталога, который вы используете для разработки. Если вы проверяете этот материал в системе контроля версий, его нужно написать так, чтобы его можно было извлечь где угодно. Переместите tests
на один каталог вниз.
mydevdir/
setup.py
project/
__init__.py
features/
__init__.py
CompareText.py
tests/
test.py
Как написать setup.py
. Это может быть довольно сложно. Вы можете прочитать Сборка и распространение пакетов с помощью Setuptools и поискать другие ресурсы на net, но минималистичный setup.py -
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(name='project',
version='0.1',
description='This is project: project',
packages=find_packages(),
)
Теперь, а в mydevdir
do python setup.py develop
. Или вы можете создать установочный пакет и поместить его в виртуальную среду для тестирования.
Взломать sys.path
Возможно, проще взломать пути в test.py
. Обратите внимание, что это нужно будет отменить, если вы сделаете project
устанавливаемым позже. Просто добавьте в начало test.py
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).absolute().parents[2]))
. Это поместит родительский каталог по пути python, и теперь project
будет найден при импорте. Существует риск, что файл .py в том же каталоге, что и project
, может замаскировать установленный модуль. Если у вас есть местный csv.py
, а у вас import csv
, вы получите местный