Ya sé Python. ¿Ahora qué? ☺️

Miguel Sánchez de León Peque

2019-10-04

Presentación

¡Hola! 👋

Taller

Objetivo: aprender
(a contribuir y compartir)

  • Repaso de herramientas/servicios
  • Poca profundización
  • Interactivo (a ver qué tal)

Cubriremos 📖

  • Metodologías de desarrollo
  • Servicios de control de versiones
  • Entornos virtuales (venv)
  • Herramientas de testeo
  • Sistemas de integración continua
  • Herramientas y servicios de documentación
  • Distribución de paquetes
  • Otros gestores de entornos virtuales

Requisitos 💻

  • Python nivel básico
  • Git nivel básico
  • Python 3.6+, Git 2.0+, gitk

Encuesta rápida

  • ¿Quién ha hecho ya algún pull request?
  • ¿Quién ha utilizado pytest y Travis?
  • ¿Quién documenta sus proyectos?

Metodologías de desarrollo

Hay 3 metodologías de desarrollo

La nuestra

  • TDD
  • Integración en master
  • Todo código es revisado
  • Integración continua
  • Trabajo con forks

¿Es la buena? 😂

  • Muy utilizada
  • La más común en proyectos libres
  • Aplicable a cualquier proyecto

TDD ✅

  1. Escribimos el test
  2. Escribimos el código

Integración en master

Flujos:

  • Git flow
  • GitHub
  • Gitlab

GitHub

Gitlab

Revisiones 👍

  • Pull/merge requests
  • Discusiones
  • Comentarios sobre el código

Integración continua

  • Pequeños cambios
  • Infraestructura

Fork

  • Grupo/organización vs. usuario
  • upstream vs. origin
  • Limpieza
  • Seguridad
  • Permisos

Compartir repositorio

Servicios de control de versiones

¿Qué opciones hay?

Hoy… 🎉

Primer commit 👶

Nuevo repositorio

Commit inicial

Claves SSH 🔒

Primer pull request 💪

Fork!

Clonación 🐑

Objetivo 🎯

Comandos de Git

Pull request!

Detalles

PR abierto

Revisión 👍

Integración

Sincronización y limpieza

¿Merge commit?

rebase o no rebase

Esa es la cuestión…

Entornos virtuales 👽

venv

[other]$ python --version
Python 2.7.16
[other]$ python3 -m venv .venv
[other]$ source .venv/bin/activate
(.venv) [other]$ python --version
Python 3.6.9

requirements.txt

También con rangos y condiciones

Instalación de dependencias

(.venv) [other]$ pip install -r requirements.txt
(.venv) [other]$ pytest --version

Testeo 🔍

¿pytest?

test_mymodule.py

mymodule.py

Opciones

  • -v
    • Algo más de información
  • -x
    • Parar tras primer fallo
  • -k nombre
    • Filtrar por “nombre”
  • --pdb
    • ¡Entrar en consola de depuración! 😄

requirements.txt

Demostración 👀

code/pytest-pdb/

Pull request! 🎉

  • Tests
  • Módulo
  • Requisitos

Integración continua 🚀

Travis CI

Registro

Activación

.travis.yml

Pull request! 🎉

  • Configuración de Travis

Flecos y estilo 😎

flake8

requirements.txt

Uso:

Black

requirements.txt

Uso:

.travis.yml

Pull request! 🎉

  • Requisitos
  • Configuración de Travis

Otros

  • flake8-isort
  • Mypy
  • Cobertura
  • Seguridad
  • Limpieza

Documentación 📖

Sphinx

Sintaxis

Enlaces 🔗

Otras directivas 😍

Aún más

Matplotlib ❤️ Sphinx

¡Y mucho más! 😍 😍 😍

Integrar Sphinx

requirements.txt

Plantilla de documentación

> Separate source and build directories (y/n) [n]: y
> Project name: My Project
> Author name(s): My Name
> Project release []: 0.0.1
> Project language [en]: en

Directorio 🎯

docs/
  make.bat
  Makefile
  build/
  source/
    index.rst
    conf.py
    _static/
    _templates/

Generación

Pull request! 🎉

  • Requisitos
  • docs/Makefile
  • docs/source/
  • Evitamos docs/build! (.gitignore)

Documentación en linea 🌍

Gitlab Pages 👍

GitHub Pages 😅

???

https://peque.github.io/PyConES-Spain-2019-tools/

Read the Docs

.readthedocs.yml

Pull request! 🎉

  • .readthedocs.yml

¿CI en local?

Tox

Instalación:

Uso:

tox.ini

.travis.yml

Pull request! 🎉

  • tox.ini
  • .travis.yml

Distribución de paquetes 📦

PyPI

Directory structure

workshop/
  docs/
    source/
      ...
    Makefile
  mypackage/
    __init__.py
    mymodule.py
    tests/
      test_mymodule.py
  setup.py
  LICENSE
  README.md

setup.py

Twine

Construir:

Publicar:

Más 📈

pytest

  • fixture (scopes)
  • mark.parametrize
  • mark.skipif
  • conftest.py

Otros gestores de entornos virtuales

  • Conda
  • Pipenv
  • Poetry

Ayuda al desarrollo

¡Eso es todo! 🎉 🍻 😄

Hacktoberfest

¡Gracias! 🎉 ❤️