How to create a reusable Django app and distribute it with PIP or publish to pypi.org
Overview
This article is an overview of the basic process to help to create a general purpose Django app and use it with PIP.
1. Code
Create the app with /original-project$ python manage.py startapp my_new_app
in an
existing project, then move it to a new directory separated from the
project lik /django-new-app
.
More at https://docs.djangoproject.com/en/3.2/intro/reusable-apps/
Add tests as a new app in django-new-app
.
So we have:
original-project/
django-new-app/
- my-new-app
- tests
Examples
Have a look at a popular Django apps to see how they structure the project, like:
django-allauth
: https://github.com/pennersr/django-allauthdjango-oscar
: https://github.com/django-oscar/django-oscar- usage of requirements of another apps
django-filter
: https://github.com/carltongibson/django-filter
2. Package
To use it in original-project
, we need to package the application
(building a source distribution[^source-dist] for your package) with setup.py
: https://setuptools.readthedocs.io/en/latest/userguide/quickstart.html
After you are able to create the package with ``python3.8 setup.py
sdistyou will have a compressed file (**Built Distribution**[^built-dist]) in
django-new-app/dist`
https://packaging.python.org/glossary/#term-Built-Distribution
To include non module files, create a MANIFEST.in
file. 1
Here is a basic sample package for pypi.org: https://github.com/pypa/sampleproject/
Handle dependencies
- Managing Application Dependencies with Pipenv https://packaging.python.org/tutorials/managing-dependencies/
- Other alternatives for packaging and handling dependencies is poetry
3. Use it
In our original-project
now we can use it with python -m pip install /django-new-app/
or add --user
if you are not already
using a virtual environment.
4. Publish to pypi.org (Optional)
Guides:
- https://packaging.python.org/tutorials/packaging-projects/
- “to create the package, how to build the package, and how to upload it to the Python Package Index”: https://packaging.python.org/tutorials/packaging-projects/
References
- August 1, 2023
- How to create a reusable Django app and distribute it with PIP or publish to pypi.org
- How To Serve Multiple Django Applications with uWSGI and Nginx in Ubuntu 20.04October 26, 2020
- How to add favicon to Django in 4 stepsSeptember 3, 2020
- Categories in Django with BreadcrumbsAugust 30, 2020
- How To Migrate From SQLite To PostgreSQL In Django In 3 stepsAugust 28, 2020
- Practical guide to internationalize a Django app in 5 steps.August 24, 2020
- Disable new users singup when using Django's allauth packageSeptember 3, 2019
- How to add ads.txt to Django as requested by Google AdsenseAugust 30, 2019
- Have multiple submit buttons for the same Django formJuly 2, 2019
- Better Testing with Page Object Design in DjangoMay 1, 2019
- Generating slugs automatically in Django without packages - Two easy and solid approachesFebruary 14, 2019
- How to set up Django tests to use a free PostgreSQL database in HerokuFebruary 13, 2019
- Dynamically adding forms to a Django FormSet with an add button using jQueryFebruary 6, 2019
- Use of Django's static templatetag in css file to set a background imageFebruary 1, 2019
- Activate Django's manage.py commands completion in Bash in 2 stepsJanuary 29, 2019
- Sending Emails with Django using SendGrid in 3 easy stepsJanuary 9, 2019
- Adding Users to Your Django Project With A Custom User ModelSeptember 21, 2018
- Setting Up A Factory For One To Many Relationships In FactoryboyApril 17, 2018
- Generate UML class diagrams from django modelsMarch 24, 2018
- Set Up Ubuntu To Serve A Django Website Step By StepJuly 3, 2017
- Django Project Directory StructureJuly 16, 2016
- How to Have Different Django Settings for Development and Production, and environment isolationJune 10, 2016
- Django OverviewJune 2, 2016
Django Forms
- Adding a Cancel button in Django class-based views, editing views and formsJuly 15, 2019
- Using Django Model Primary Key in Custom Forms THE RIGHT WAYJuly 13, 2019
- Django formset handling with class based views, custom errors and validationJuly 4, 2019
- How To Use Bootstrap 4 In Django FormsMay 25, 2018
- Understanding Django FormsApril 30, 2018
- How To Create A Form In DjangoJuly 29, 2016
Articles
Subcategories
Except as otherwise noted, the content of this page is licensed under CC BY-NC-ND 4.0 . Terms and Policy.
Powered by SimpleIT Hugo Theme
·