Расширенный учебник: создание многоразовых приложений

Это расширенное руководство начинается с того места, где закончилось обучение 7 . Мы собираемся превратить наше приложение для веб-опросов в отдельный пакет Python, который можно будет повторно использовать в новых проектах и ​​поделиться с другими людьми.

Если вы недавно не изучили Уроки 1–7, мы рекомендуем вам просмотреть их еще раз, чтобы ваш пример проекта соответствовал описанному ниже.

Важность вторичной переработки

Спроектировать, создать, протестировать и поддерживать веб-приложение - это большая работа. Многие проекты Python и Django имеют общие проблемы. Разве не было бы замечательно, если бы мы могли сэкономить часть этой повторяющейся работы?

Повторное использование кода - это жизненный принцип Python. На сайте Python Package Index (PyPI) перечислены самые разные пакеты, которые можно использовать в ваших собственных программах Python. Просмотрите сайт пакетов Django, чтобы найти многоразовые приложения, которые вы можете интегрировать в свой проект. Сам Django - это просто пакет Python. Это означает, что вы можете взять существующие пакеты Python или приложения Django и скомпоновать их в свой собственный веб-проект. Вам просто нужно написать части, которые сделают ваш проект уникальным.

Допустим, вы начинаете новый проект, для которого требуется приложение для опросов, подобное тому, над которым мы работали. Как можно утилизировать это приложение? К счастью, вы уже на правильном пути. В Уроке 1 мы увидели, как отделить опросы от базовой настройки URL-адреса проекта с помощью файла include . В этом руководстве мы сделаем еще один шаг, чтобы упростить использование приложения в новых проектах и ​​сделать его готовым к выпуску для установки и использования другими.

Пакет? Заявка ?

Python пакет позволяет Python код быть сгруппированы вместе , так что его можно легко использовать повторно. Пакет содержит один или несколько файлов кода Python (также известных как «модули»).

Пакет можно импортировать с помощью или . Чтобы каталог (например, ) был пакетом, он должен содержать специальный файл , даже если специальный файл пуст.import foo.bar from foo import bar polls __init__.py

Django приложение представляет собой пакет Python , который специально разработан для работы в проекте Django. Приложение может использовать Django совместно конвенции, такие как наличие суб-модулей models , tests , urls и views .

Впоследствии мы будем использовать термин упаковка (упаковка) для описания процесса создания пакета Python, который легко установить любым. Да, это может сбивать с толку.

Ваш проект и ваше приложение, пригодное для вторичной переработки

После предыдущих уроков наш проект должен выглядеть так:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
            0001_initial.py
        models.py
        static/
            polls/
                images/
                    background.gif
                style.css
        templates/
            polls/
                detail.html
                index.html
                results.html
        tests.py
        urls.py
        views.py
    templates/
        admin/
            base_site.html

Вы создали mysite/templates в уроке 7 и polls/templates в уроке 3 . Теперь может быть легче понять, почему мы отделили каталоги шаблонов проекта от каталогов приложения: все, что является частью приложения опроса, находится внутри polls . Приложение само по себе образует единое целое, поэтому его легче интегрировать в новый проект.

Теперь каталог polls можно скопировать в новый проект Django для немедленного использования. Однако приложение еще не совсем готово к выпуску. Для этого вам все равно нужно упаковать приложение, чтобы другие могли легко его установить.

Установка некоторых предварительных условий

Текущее состояние сборки пакетов Python немного сбивает с толку из-за использования нескольких инструментов. В этом руководстве мы будем использовать setuptools для сборки наших пакетов. Это инструмент упаковки, который мы рекомендуем (объединенный с производной версией distribute ). Мы также будем использовать pip для его установки и удаления. Теперь вы должны установить эти два пакета. Если вам нужна помощь, вы можете обратиться к Как установить Django с помощью pip . Установить можно setuptools точно так же.

Упаковка приложения

« Упаковка Python» относится к подготовке приложения в определенном формате, который можно легко установить и использовать. Сам Django упакован очень похоже. Для такого небольшого приложения, как наше, этот процесс не так уж и сложен.

  1. Сначала создайте родительский каталог polls вне вашего проекта Django. Назовите этот каталог django-polls .

    Выбор имени для вашего приложения

    При выборе имени для своего пакета ознакомьтесь с такими ресурсами, как PyPI, чтобы избежать конфликтов имен с существующими пакетами. Часто бывает полезно django- добавить к имени вашего модуля префикс при создании пакета для распространения. Это упрощает людям, ищущим приложения Django, возможность идентифицировать ваше приложение как специфичное для Django.

    Метки приложений (то есть последняя часть пути, указывающая на пакет приложения) должны быть уникальными. Избегайте использования того же тега, что и у любого из приложений , предоставленных Django, например , или .INSTALLED_APPS auth admin messages

  2. Переместите каталог polls в каталог django-polls .

  3. Создайте файл, django-polls/README.rst содержащий это:

    django-polls / README.rst
    =====
    Polls
    =====
    
    Polls is a Django app to conduct Web-based polls. For each question,
    visitors can choose between a fixed number of answers.
    
    Detailed documentation is in the "docs" directory.
    
    Quick start
    -----------
    
    1. Add "polls" to your INSTALLED_APPS setting like this::
    
        INSTALLED_APPS = [
            ...
            'polls',
        ]
    
    2. Include the polls URLconf in your project urls.py like this::
    
        path('polls/', include('polls.urls')),
    
    3. Run ``python manage.py migrate`` to create the polls models.
    
    4. Start the development server and visit http://127.0.0.1:8000/admin/
       to create a poll (you'll need the Admin app enabled).
    
    5. Visit http://127.0.0.1:8000/polls/ to participate in the poll.
    
  4. Создайте файл django-polls/LICENSE . Выбор лицензии не является темой этого руководства, но мы хотели бы отметить, что код, выпущенный без лицензии, не нужен . Django и многие Django-совместимые приложения распространяются по лицензии BSD; вы, конечно, можете свободно использовать лицензию по своему выбору. Просто имейте в виду, что выбор лицензии влияет на количество потенциальных пользователей вашего кода.

  5. Далее, мы создадим файлы setup.cfg и setup.py которые определяют , как построить и установить приложение. Мы не будем вдаваться в подробное описание этих файлов, но вы можете найти дополнительную информацию в документации по setuptools . Создайте файлы django-polls/setup.cfg и django-polls/setup.py со следующим содержимым:

    django-polls / setup.cfg
    [metadata]
    name = django-polls
    version = 0.1
    description = A Django app to conduct Web-based polls.
    long_description = file: README.rst
    url = https://www.example.com/
    author = Your Name
    author_email = [email protected]
    license = BSD-3-Clause  # Example license
    classifiers =
        Environment :: Web Environment
        Framework :: Django
        Framework :: Django :: X.Y  # Replace "X.Y" as appropriate
        Intended Audience :: Developers
        License :: OSI Approved :: BSD License
        Operating System :: OS Independent
        Programming Language :: Python
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3 :: Only
        Programming Language :: Python :: 3.6
        Programming Language :: Python :: 3.7
        Programming Language :: Python :: 3.8
        Topic :: Internet :: WWW/HTTP
        Topic :: Internet :: WWW/HTTP :: Dynamic Content
    
    [options]
    include_package_data = true
    packages = find:
    
    django-polls / setup.py
    from setuptools import setup
    
    setup()
    
  6. По умолчанию в пакет включены только модули и пакеты Python. Чтобы добавить дополнительные файлы, нам нужно будет создать файл MANIFEST.in . Документация, setuptools упомянутая на предыдущем шаге, подробно представляет этот файл. Чтобы включить шаблоны и файлы, README.rst и LICENSE создайте файл django-polls/MANIFEST.in со следующим содержимым:

    django-polls / MANIFEST.in
    include LICENSE
    include README.rst
    recursive-include polls/static *
    recursive-include polls/templates *
    
  7. Необязательно, но рекомендуется включать подробную документацию в ваше приложение. Создайте пустой каталог django-polls/docs для документального контента. Добавьте дополнительную строку в django-polls/MANIFEST.in :

    recursive-include docs *
    

    Обратите внимание, что каталог docs не будет включен в ваш пакет, пока вы не добавите в него файл. Многие приложения Django также предоставляют онлайн-версию своей документации на таких сайтах, как readthedocs.org .

  8. Попробуйте собрать свой пакет с помощью (запущен из ). Это создаст каталог с именем и построит ваш новый пакет .python setup.py sdist django-polls dist django-polls-0.1.tar.gz

Для получения дополнительной информации об упаковке см. Учебное пособие по упаковке и распространению проектов .

Использование собственного пакета

Когда мы переместили каталог polls из проекта, он больше не работает. Теперь мы исправим это, установив наш новый пакет django-polls .

Установка как пользовательская библиотека

Следующие шаги установите django-polls как пользовательскую библиотеку. «Пользовательские» установки имеют много преимуществ по сравнению с установкой пакетов на системном уровне, например, возможность использования в системах, в которых вы не являетесь администратором, или предотвращение вмешательства пакета в системные службы или другие. пользователи машины.

Обратите внимание, что «пользовательские» установки по-прежнему могут влиять на поведение системных инструментов, работающих под этим именем пользователя, поэтому более надежно использовать виртуальную среду (см. Ниже).

  1. Чтобы установить пакет, используйте pip (вы его уже установили , верно?):

    python -m pip install --user django-polls/dist/django-polls-0.1.tar.gz
    
  2. Если все в порядке, ваш проект Django должен снова работать нормально. Снова запустите сервер, чтобы проверить это.

  3. Чтобы удалить пакет, используйте pip:

    python -m pip uninstall django-polls
    

Публикация приложения

После упаковки и тестирования django-polls он готов поделиться с миром! Если бы это был не просто пример, теперь вы могли бы:

Установка пакетов Python в виртуальной среде

Раньше мы устанавливали приложение для опроса как пользовательскую библиотеку. У этого есть некоторые недостатки:

  • Изменение пользовательских библиотек может повлиять на другое программное обеспечение Python в вашей системе.
  • Вы не сможете запускать несколько версий этого пакета параллельно (или с другими с тем же именем).

Обычно такие ситуации возникают только при поддержке нескольких проектов Django. В этих случаях лучшее решение - использовать венв . Этот инструмент помогает поддерживать несколько сред Python изолированными друг от друга, каждая из которых имеет свою собственную копию библиотек и пространство имен пакетов.

Copyright ©2020 All rights reserved