Cómo subir tu paquete de Python a PyPi

El índice del paquete PyPi es una de las propiedades que hace que Python sea tan potente: con solo un comando simple, obtienes acceso a miles de geniales bibliotecas, listas para usar. En esta breve introducción, voy a explicar cómo puede cargar, cargar su propio código en PyPi y dejar que otros se beneficien de sus inventos. En las siguientes páginas, le mostraré los siguientes pasos:

  • Haga que su código esté listo para publicación
  • Crea un paquete de Python
  • Crea los archivos que necesita PyPi
  • Crea una cuenta PyPi
  • Sube tu paquete a github.com
  • Sube tu paquete a PyPi
  • Instale su propio paquete usando pip
  • Cambia tu paquete
Guía completa de cómo cargar su paquete a PyPi e instalarlo a través de pip. Captura de pantalla: PyPi.org

¿Pero qué es PyPi?

Bueno, según su sitio web:

Python Package Index (PyPI) es un repositorio de software para el lenguaje de programación Python. PyPI lo ayuda a encontrar e instalar software desarrollado y compartido por la comunidad de Python. Aprenda sobre la instalación de paquetes. Los autores de paquetes usan PyPI para distribuir su software. Aprenda cómo empaquetar su código Python para PyPI.

Cómo usar PyPi

Estoy seguro de que la mayoría de ustedes ya ha instalado PyPi (pip) y ha trabajado con él. Si no lo has hecho, ¡definitivamente deberías! Es tan simple como descargar este archivo. Ahora, abra su símbolo del sistema y navegue a través de "cd" en el directorio donde se encuentra el archivo descargado. Luego, ejecute el comando "python get-pip.py".

cd "C: // RUTA // A // SU // DESCARGADO // ARCHIVO"
python get-pip.py

Para usar pip, escriba "pip insall packagename" en la consola. Cuando desee instalar scrapeasy, escriba el siguiente comando:

pip install scrapeasy

¿Recibió un error que dice "pip" no se reconoce como un comando interno o externo, un programa operable o un archivo por lotes? No se asuste, tenemos esto. Su script pip no está en las variables de entorno de Windows, por lo que no puede acceder a él desde cualquier lugar de su sistema. Arreglemos esto con el siguiente comando:

setx PATH "% PATH%; C: // WHERE // PYTHON // IS // INSTALLED // Scripts"

O como ejemplo

setx PATH "% PATH%; C: \ Python36 \ Scripts"

Debería funcionar ahora.

Haga que su código esté listo para publicación

Vamos a preparar su código para la carga. Primero, debe eliminar todas las declaraciones de "impresión" de su código. Es molesto cuando trabaja con una biblioteca y su mensaje de comando está inundado de mensajes impresos que no son suyos, por lo tanto, elimínelos todos. Si desea informar al usuario sobre ciertas actividades, use el registro.

También asegúrese de no incluir el código que existe fuera de la clase de una función, de lo contrario, este código se ejecutará cada vez que alguien importe su biblioteca. Si desea incluir código de ejemplo en las clases (que es legítimo), envuélvalo en la función "__main__".

if __name__ == "__main__":
    su código de ejemplo va aquí

Crea un paquete de Python

Para crear un paquete, cree una carpeta que tenga el nombre exactamente como desea que se nombre su paquete. Coloque todos los archivos y clases que desea enviar a esta carpeta.

Ahora, cree un archivo llamado __init__.py (nuevamente dos guiones bajos). Abra el archivo con el editor de texto que prefiera. En este archivo, no escribe más que declaraciones de importación que tienen el siguiente esquema:

from packagename.Filename import Classname

El archivo __init__.py se usa para marcar a qué clases desea que acceda el usuario a través de la interfaz del paquete. Hagamos un ejemplo. Suponga que desea cargar una biblioteca llamada "MyLib" a PyPi. Primero, cree una carpeta llamada "MyLib" y coloque sus clases dentro de ella.

MyLib
 -Class1.py
 -Class2.py

Luego, elimine todas las declaraciones de impresión y todo el código que no se encuentra dentro de una clase.

Finalmente, cree el archivo __init.py __- e importe todos los métodos a los que debe acceder el usuario.

MyLib
 -__init__.py
 -File1.py
 -File1.py
# Dentro de __init__.py
desde MyLib.File1 importar ClassA, ClassB, ClassC
desde MyLib.File2 import ClassX, ClassY, ClassZ

Crea una cuenta PyPi

Puede registrarse para obtener una cuenta de PyPi aquí. Recuerde su nombre de usuario (no el nombre, no la dirección de correo electrónico) y su contraseña, la necesitará más adelante para el proceso de carga.

Sube tu paquete a github.com

Cree un repositorio de github que incluya todos los archivos que crearemos en un segundo, así como la carpeta de su paquete. Nombre el repositorio exactamente como el paquete. Encuentra un ejemplo de tal repositorio aquí.

Crea los archivos que necesita PyPi

PyPi necesita tres archivos para funcionar:

  • setup.py
  • setup.cfg
  • LICENCIA.txt
  • README.md (optinal pero muy recomendable)

Coloque todos estos archivos fuera de la carpeta de su paquete:

MyLib
 setup.py
 setup.cfg
 LICENCIA.txt
 README.md

Veamos estos archivos uno por uno

setup.py

El archivo setup.py contiene información sobre su paquete que necesita PyPi, como su nombre, una descripción, la versión actual, etc. Copie y pegue el siguiente código y reemplace las cadenas con su contenido correspondiente:

desde la configuración de importación distutils.core
preparar(
  name = 'YOURPACKAGENAME', # Cómo nombró la carpeta de su paquete (MyLib)
  paquetes = ['YOURPACKAGENAME'], # Elija lo mismo que "nombre"
  version = '0.1', # Comience con un número pequeño y aumente con cada cambio que realice
  license = 'MIT', # Elija una licencia desde aquí: https://help.github.com/articles/licensing-a-repository
  description = 'TIPE SU DESCRIPCIÓN AQUÍ', # Haga una breve descripción sobre su biblioteca
  author = 'YOUR NAME', # Escriba su nombre
  author_email = 'your.email@domain.com', # Escriba su correo electrónico
  url = 'https://github.com/user/reponame', # Proporcione el enlace a su github o a su sitio web
  download_url = 'https://github.com/user/reponame/archive/v_01.tar.gz', # explico esto más adelante
  palabras clave = ['ALGUNOS', 'SIGNIFICADO COMPLETO', 'PALABRAS CLAVE'], # Palabras clave que definen mejor su paquete
  install_requires = [# Llego a esto en un segundo
          'validadores',
          'beautifulsoup4',
      ],
  clasificadores = [
    'Estado de desarrollo :: 3 - Alfa', # Elija "3 - Alfa", "4 - Beta" o "5 - Producción / Estable" como el estado actual de su paquete
    'Público previsto :: Desarrolladores', # Definir que su audiencia sean desarrolladores
    'Tema :: Desarrollo de software :: Herramientas de construcción',
    'Licencia :: Aprobado por OSI :: Licencia MIT', # Nuevamente, elija una licencia
    'Lenguaje de programación :: Python :: 3', # Especifique qué versiones de Pyhton desea admitir
    'Lenguaje de programación :: Python :: 3.4',
    'Lenguaje de programación :: Python :: 3.5',
    'Lenguaje de programación :: Python :: 3.6',
  ],
)

Permítanme explicar un poco más download_url y install_requires.

download_url

Ya ha subido su proyecto a su repositorio de github. Ahora, creamos una nueva versión de lanzamiento de su proyecto en github. Esta versión será descargada por cualquier persona que ejecute el comando "pip install YourPackage".

Primero, vaya a github.com y navegue a su repositorio. A continuación, haga clic en la pestaña "lanzamientos" y luego en "Crear un nuevo lanzamiento". Ahora, defina una versión de etiqueta (es mejor usar el mismo número que usó en su campo de versión setup.py: v_01. Agregue un título de lanzamiento y una descripción (no tan importante), luego haga clic en "publicar lanzamiento". Ahora ve una nueva versión y, en Activos, hay un enlace al Código fuente (tar.gz). Haga clic derecho en este enlace y elija Copiar dirección del enlace. Pegue esta dirección del enlace en el campo download_url en el archivo setup.py Cada vez que desee actualizar su paquete más adelante, cargue una nueva versión en github, cree una nueva versión como acabamos de comentar, especifique una nueva etiqueta de versión y copie y pegue el enlace a Source en el archivo setup.py (no olvide también incrementar el número de versión).

Install_requires

Aquí, usted define todas las dependencias que tiene su paquete, todos los paquetes pip que está importando. Simplemente hablando: revisa todas tus clases y mira lo que has importado. Todos los paquetes que haya importado y descargado a través de pip (lo más probable es que todos, excepto las bibliotecas estándar) se enumeren aquí como requisitos de instalación agregando el nombre del paquete.

Dejame darte un ejemplo

# En el archivo Class1
importar numpy como np
de la página web de importación scrapeasy
tiempo de importación

Los paquetes "numpy" y "scrapeasy" se descargaron a través de pip, por lo que debe agregar "numpy" y "scrapeasy" en sus dependencias. Pero, ¿cómo saber si un paquete es una biblioteca estándar o si se descarga a través de pip? Bueno, simplemente abra su cmd y escriba pip install packagename. Si obtiene "Requisito ya satisfecho", está listo para comenzar. Si recibe un error que dice "No se pudo encontrar una versión que satisfaga el requisito", sabrá que este paquete no está instalado a través de pip o una biblioteca estándar.

El campo install_requires resultante se vería así:

install_requires = [
          'numpy',
          'scrapeasy',
      ],

setup.cfg

Este es uno corto. Cree un nuevo archivo llamado "setup.cfg". Si tiene un archivo de descripción (¡y definitivamente debería hacerlo!), Puede especificarlo aquí:

# Dentro de setup.cfg
[metadatos]
description-file = README.md

LICENCIA.txt

Use este archivo para definir todos los detalles de la licencia. Lo más probable es que solo copie y pegue el texto de la licencia de este sitio web en el archivo LICENSE.txt. Siempre uso la licencia MIT para mis proyectos, pero siéntase libre de usar la suya.

Licencia MIT
Copyright (c) 2018 SU NOMBRE
Por la presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia
de este software y los archivos de documentación asociados (el "Software"), para tratar
en el Software sin restricción, incluidos, entre otros, los derechos
para usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y / o vender
copias del Software y para permitir a las personas a quienes pertenece el Software
amueblado para hacerlo, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso se incluirán en todos
copias o partes sustanciales del software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
IMPLÍCITO, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD,
APTITUD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO EL
LOS AUTORES O LOS TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES POR CUALQUIER RECLAMACIÓN, DAÑO U OTRO
RESPONSABILIDAD, EN CASO DE ACCIÓN DE CONTRATO, TORTURA O DE OTRA MANERA, DERIVADA DE,
FUERA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRAS OFERTAS EN EL
SOFTWARE.

README.md (Opcional)

Cree un archivo de descuento con este hermoso sitio web, luego descárguelo y colóquelo en su directorio.

Sube tu paquete a PyPi

Ahora, el paso final ha llegado: subir su proyecto a PyPi. Primero, abra el símbolo del sistema y navegue a la carpeta donde tiene todos sus archivos y su paquete:

cd "C: // RUTA // A // SU // CARPETA"

Ahora, creamos una distribución fuente con el siguiente comando:

python setup.py sdist

Es posible que reciba una advertencia que indique "Opción de distribución desconocida:" install_requires ". Simplemente ignóralo.

Necesitaremos cordel para el proceso de carga, así que primero instale el cordel a través de pip:

pip install twine

Luego, ejecute el siguiente comando:

twine upload dist / *

Se le pedirá que proporcione su nombre de usuario y contraseña. Proporcione las credenciales que utilizó para registrarse en PyPi anteriormente.

¡Felicitaciones, su paquete ya está cargado! ¡Visite https://pypi.org/project/YOURPACKAGENAME/ para ver su paquete en línea!

Instale su propio paquete usando pip

Bien, ahora probemos esto. Abra su consola y escriba el siguiente comando:

pip install YOURPACKAGENAME

¡Funciona! Ahora abra Python SHELL / IDLE e importe su paquete.

Cambia tu paquete

Si mantiene bien su paquete, deberá cambiar el código fuente de vez en cuando. Esto es facil. Simplemente cargue su nuevo código en github, cree una nueva versión, luego adapte el archivo setup.py (nuevo download_url - de acuerdo con su nueva etiqueta de lanzamiento, nueva versión), luego ejecute setup.py y el comando gemelo nuevamente (navegue hasta su carpeta primero!)

python setup.py sdist
twine upload dist / *

Finalmente, actualice su paquete a través de pip para ver si sus cambios funcionaron:

pip install YOURPACKAGE --upgrade