В данной статье будет рассмотрена структура консольного приложения и некоторые технические особенности его реализации на высокоуровневом языке Python.
Статья носит ознакомительный характер, автор и туп, и глуп.
Рассмотрим общую структуру файловой системы нашего приложения:
— Если ваш проект называется Flower, то и корневая директория вашего проекта должна называться Flower и никак иначе. При релизе проекта, вы должны добавлять номер версии (прим. Flower-1.0).
— Если у вас есть исполняемые файлы вам следует создать отдельную папку bin. Расширения данным файлам указывать не стоит, даже если это исполняемые файлы Python и это противоречит правилам самого языка. В них не должно быть никакого кода, кроме импортов и вызова главной функции.
— Если ваш проект состоит из одного исполняемого файла, то его следует поместить в корневой каталог и назвать связанным именем с вашим проектом (прим. flower.py). Если ваш проект подразумевает несколько исходных файлов, то следует создать пакет (Flower/flower/__init__.py, где __init__.py пустой файл) и поместить в него все нужные исходные файлы для данного пакета.
— Все нужные юнит-тесты для данного пакета помещаются в подпакет. Например, Flower/flower/test .
— Так же необходимым является добавление в корневой каталог файлов setup.py и README.md, для соответственно объяснения и установки вашего программного обеспечения.
Структура проекта в общем виде выглядит следующим образом:
Flower/
|— bin /
|— |— flower /
|— flower /
|— |— test /
|— |— docs /
|— |— __init__.py
|— |— main.py
|— |— flower.py
Выделим так же некоторые возможные ошибки в файловой структуре проекта.
— Нельзя размещать тесты вне вашего пакета. Это может затруднить их запуск.
— Нельзя создавать пакет в котором только один пустой __init__.py или весь ваш исходный код находится в этом файле.
Далее мы рассмотрим несколько технических аспектов реализации консольного приложения.
Для того, чтобы начинать разработку любого программного обеспечения на Python, необходимо (а вообще и обязательно) создавать собственное виртуальное окружение под каждый проект. Делается это для того, чтобы избежать конфликта версий установленных вами пакетов.
Для установки воспользуемся pip:
pip install virtualenv
Две основные команды, которые нам нужны на начальном уровне:
virtualenv myproject
source myproject/bin/activate
Первая команда создаст виртуальное окружение в текущей директории из версии интерпретатора, которая стоит в вашей системе по умолчанию.
Вторая же команда, активирует виртуальное окружение в консоли, для того, чтобы вы могли начать с ним работать.
В нашем случае виртуальное окружение позволит нам быстро тестировать наше консольное приложение, которое мы и будем устанавливать в это окружение.
Итак, нам теперь надо правильно заполнить файл setup.py и протестировать наше приложение на простеньком скрипте.
Для начала заполним setup.py.
from setuptools import setup, find_packages
from os.path import join, dirname
import flower
setup(
name='flower',
version=flower.__version__,
packages=find_packages(),
long_description=open(join(dirname(__file__), 'README.md')).read(),
entry_points= {
'console_scripts':
['flower = flower.flower:main']
}
)
Для установки приложений мы будем использовать setuptools, который уже предустановлен в интерпретатор.
При заполнении setup, стоит упомянуть, что __version__ располагается в __init__.py пакета flower.
В entry_points мы задаём точки входа через консоль для нашего ПО. В данном случае при написании flower в консоли, мы будем обращаться к пакету flower, файлу flower.py, к функции main. Для теста можно в ней к примеру написать print(''Hello world !''), что при написании команды, выдаст в консоль соответствующие сообщение.
Для тестирования нашего проекта достаточно активировать наше виртуальное окружение командой рассмотренной выше и проделать в директории проекта следующие команды.
python setup.py install — установит наше ПО в данное виртуальное окружение.
flower — протестируем пример.