$30 off During Our Annual Pro Sale. View Details »

Packager son projet Django

Packager son projet Django

Bruno Renié

April 14, 2012
Tweet

More Decks by Bruno Renié

Other Decks in Programming

Transcript

  1. Bruno Renié
    Djangocong 2012
    Packager
    son projet Django

    View Slide

  2. distribuer / déployer
    du code

    View Slide

  3. git

    View Slide

  4. dépendances
    rollback
    traçabilité

    View Slide

  5. PaaS

    View Slide

  6. contraintes
    géographiques
    architecturales
    culturelles

    View Slide

  7. packaging

    View Slide

  8. installer son application comme
    une simple bibliothèque*
    * configuration laissée au soin de l'utilisateur

    View Slide

  9. simplicité
    traçabilité
    reproductibilité

    View Slide

  10. OS
    Application
    deb / RPM
    setup.py

    View Slide

  11. View Slide

  12. django
    nettoyez-moi tout ça

    View Slide

  13. arrêter d'altérer sys.path
    project/
    __init__.py
    urls.py
    app1/
    __init__.py
    models.py
    app2/
    from project.app1.views import stuff

    View Slide

  14. Application réutilisable : package séparé
    from project.app.models import Stuff
    from registration.models import RegistrationProfile
    Application non réutilisable : embarquée

    View Slide

  15. requirements : versions explicites
    Django==1.4
    PIL==1.1.6
    pas de liens git

    View Slide

  16. setup.py
    from distutils.core import setup
    from setuptools import find_packages
    with open('requirements.txt') as reqs:
    install_requires = reqs.read().split('\n')
    setup(
    name='project',
    version=__import__('project').__version__,
    packages=find_packages(),
    include_package_data=True,
    zip_safe=False,
    install_requires=install_requires,
    )

    View Slide

  17. MANIFEST.in
    pour tout ce qui est non-python
    include requirements.txt
    recursive‐include project *
    recursive‐exclude project *.pyc
    recursive‐exclude project *.scss
    exclude project/settings.py

    View Slide

  18. settings
    project/default_settings.py
    Packagé :
    Déployé : settings.py
    from project.default_settings import *
    DATABASES = {

    }

    View Slide

  19. layout final
    requirements.txt
    setup.py
    MANIFEST.in
    project/
    __init__.py
    default_settings.py
    settings.py
    app1/
    app2/

    View Slide

  20. Déploiement

    View Slide

  21. env/
    public/
    static/
    settings.py
    wsgi.py
    ./env/bin/gunicorn wsgi:application
    utiliser add2virtualenv pour rendre wsgi et
    settings importables sans toucher PYTHONPATH

    View Slide

  22. pip et paquets privés
    --find-links : file:///path/to/packages
    --index-url : structure de type
    http://pypi.python.org/simple/
    bien héberger tous ses paquets
    pypi tombe, les versions disparaissent

    View Slide

  23. Workflow final
    Déployer
    (incrément n° de version)
    python setup.py sdist
    (upload)
    pip install ‐U project ‐‐find‐links …
    Rollback
    pip install project==X.Y.Z ‐‐find‐links …

    View Slide

  24. https://github.com/brutasse/fab-bundle
    @brutasse
    [email protected]

    View Slide