Я пишу скрипт, который будет выполняться из командной строки (добавив аргумент entry_points
к setup.py
).Моя структура каталогов выглядит следующим образом:
# Edit: package hasn't followed src packaging pattern, renamed to root_dir
root_dir/
conftest.py
setup.py
module1/
__init__.py
script1.py
script2.py
module2/
__init__.py
other_script1.py
other_script2.py
tests/
conftest.py
some_tests/
conftest.py
test_some_parts.py
some_other_tests/
conftest.py
test_these_other_parts.py
Edit: My setup.py
имеет аргумент entry_points следующим образом:
entry_points={
'console_scripts': ['load_data = module1.script1:main']
},
В данный момент, на вершине script1.py
Iиметь:
try:
from script2 import func2
except ModuleNotFoundError:
from .script2 import func2
Когда я устанавливаю пакет (pip install .
) и запускаю load_data
через командную строку, он хочет from script2 import func2
.Но когда я запускаю тесты, он хочет from .script2 import func2
.Я думаю, что это имеет значение, но я запускаю тесты, находясь в каталоге src/
(pytest tests/
).
Этот нечетный try/except
является полосой, которая позволяет мне запускать тесты и выполнять мой скрипт.Есть ли лучшее решение для этого или хотя бы объяснение?