Вам лучше использовать классическую архитектуру модуля / пакета Python.
projectname/
__init__.py
__main__.py
data/
__init__.py
generate.py
tasksets.py
Чтобы использовать ваше приложение, перейдите в каталог projectname/../
(на один уровень выше projectname/
) и запустите python -m projectname
. Это выполнит projectname/__main__.py
.
В __main__.py
вы напишите что-то вроде:
from projectname.data import generate
from projectname.data import tasksets
if __name__ == '__main__':
generate.foo()
tasksets.bar()
- Вы будете использовать абсолютный путь импорта (начиная с имени вашего модуля и точки,
projectname.
)
- Вы импортируете свои подмодули из
if __name__ == '__main__'
__main__.py
будет единственной точкой входа вашего приложения / скрипта.
В любом другом файле вы будете использовать тот же синтаксис и пути для импорта других модулей:
data/generate.py
from projectname.data import tasksets
def foo():
print('SPAM!')
tasksets.bar()
Что-то, что мне не очень нравится, но я не уверен, что PEP отрицают это,
В вашем projectname/__init__.py
файле вы можете написать:
from projectname.data import generate
from projectname.data import tasksets
Таким образом, ваши два подмодуля будут импортированы в вашу основную область __init__.py
, так что вы сможете импортировать подмодули из этой области, например
data/generate.py
:
from projectname import generate
Но опять же, мне не очень нравится этот способ (потому что Явное лучше, чем неявное. )
И последнее, но не менее важное:
- Вы также можете использовать команду
python projectname/__main__.py
, но я все еще рекомендую python -m projectname
- Вы можете создать файл
setup.py
, используя setuptools , чтобы «установить» ваше приложение в вашей системе и просто запустить команду projectname
, чтобы запустить его.