Esto es una taller para subir un paquete a Pypi
Todos los paquetes en PyPi han de ser únicos, puedes usar el buscador para ver si tu nombre esta disponible.
Los nombres deberían tener un formato de todo minúsculas separado por - como el de este paquete.
El directorio del proyecto ha de estar organizado de la siguiente manera:
taller-openwebinar/
│
├── package_a/
│ ├── config.txt
│ ├── __init__.py
│ ├── __main__.py
│ └── functionality_a.py
│
├── package_b/
│ ├── __init__.py
│ └── functionality_b.py
│
├── tests/
│ ├── test_functionality_a.py
│ └── test_functionality_b.py
│
├── MANIFEST.in
├── README.md
└── setup.py
Cada paquete con cada utilidad que queramos, incluido el test, deberán estar dentro de la carpeta, aqui usamos dos 3 paquetes pero pueden agregarse más.
Aquí se indicarán archivos que no sean .py
En caso de usarlo en el setup.py teneis que poner el siguiente atributo: include_package_data
a True
Los comandos que acepta el manifest están disponibles aquí
Aquí podeis poner la documentación de vuestro paquete, podeis usar vuestra propia plantilla o usar alguna existente:
- https://github.com/othneildrew/Best-README-Template
- https://github.com/dbader/readme-template
La definicion de los atributos es la siguiente:
name
: Nombre público del paquete que no deberá estar en Pypiversion
: Versión del paquetedescription
: Pequeña descripción del paquetelong_description
: Descripción larga con los detalles del paquetelong_description_content_type
: Formato de lalong_description
en caso de tenerlaclassifiers
: Información relevante del paquete como licencia o versiones de python soportadaspackages
: paquetes que se incluiraninclude_package_data
: Si incluye archivos que no sean .pyinstall_requires
: Dependencias que el paquete necesita para funcionarentry_points
: Comandos de consola que dispondra el paquete
Disponeis de plantillas para el setup.py una bastante conocida es la siguiente:
https://github.com/navdeep-G/setup.py
Lo primero que tienes que hacer es crear una cuenta en Pypi y en Pypi para test
Después deberemos seguir los pasos indicados en el video del taller para obtener un token y guardarlo en el archivo .pypirc
Una vez que este eso configurado usaremos Twine para poder subir el paquete.
Twine se instala con pip de la siguiente manera:
pip install twine
Para distribuir un paquete es necesario convertirlo a un fichero de tipo wheels, que no es mas que un fichero zip. Para hacer esto basta con usar el siguiente comando:
python3 -m pip install --user --upgrade setuptools wheel
Finalmente para crear el paquete ejecutaremos el siguiente comando
python setup.py sdist bdist_wheel
Esto nos creará una carpeta llamada dist/
entre otras que será la que usemos para subir al repositorio.
Para subir el paquete lo podemos hacer especificando el repositorio con: --repository-url
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
o con el alias del repositorio del fichero .pypirc
twine upload --repository testpypi dist/*
Aunque si no vamos a subir a test no es necesario poner nada
twine upload dist/*
Para tener nuestro propio repositorio pip privado podemos hacer un servidor git como github y subir ahí nuestro paquete en un repositorio privado.
Después para instalarlo solo será necesario usar el siguiente comando:
pip install git+ssh://[email protected]/Tlaloc-Es/taller-openwebinar.git
En este caso se hace uso de ssh y por lo tanto tendremos que tener la clave ssh instalada en el equipo y reconocida por git.
Un fallo que podras ver, es que cuando hagas pip freeze > requiremetns.txt
es que no vas a ver la url sino el nombre del paquete, lo que hará que cuando instales desde requirements.txt
vaya al repositorio Pypi en vez de al privado para ello bastara con poner otra vez git+ssh://[email protected]/Tlaloc-Es/taller-openwebinar.git
en el fichero en vez del nombre del paquete.
Una vez tengas el código listo podrás instalarlo