Como nadie cubrió esta pregunta del OP todavía:
Lo que quería hacer:
Haga que un módulo de Python sea instalable con "pip install ..."
Aquí hay un ejemplo mínimo absoluto, que muestra los pasos básicos de preparación y carga de su paquete a PyPI usando setuptools
y twine
.
Esto de ninguna manera es un sustituto para leer al menos el tutorial , hay mucho más de lo que se cubre en este ejemplo muy básico.
Crear el paquete en sí ya está cubierto por otras respuestas aquí, así que supongamos que tenemos ese paso cubierto y nuestra estructura de proyecto de esta manera:
.
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Para usar setuptools
para empaquetar, necesitamos agregar un archivo setup.py
, esto va a la carpeta raíz de nuestro proyecto:
.
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Como mínimo, especificamos los metadatos para nuestro paquete, nuestro setup.py
se vería así:
from setuptools import setup
setup(
name='hellostackoverflow',
version='0.0.1',
description='a pip-installable package example',
license='MIT',
packages=['hellostackoverflow'],
author='Benjamin Gerfelder',
author_email='benjamin.gerfelder@gmail.com',
keywords=['example'],
url='https://github.com/bgse/hellostackoverflow'
)
Como lo hemos configurado license='MIT'
, incluimos una copia en nuestro proyecto como LICENCE.txt
, junto con un archivo Léame en reStructuredText como README.rst
:
.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
En este punto, estamos listos para comenzar a usar el empaque setuptools
, si no lo tenemos instalado, podemos instalarlo con pip
:
pip install setuptools
Para hacer eso y crear un source distribution
, en nuestra carpeta raíz del proyecto llamamos a nuestro setup.py
desde la línea de comandos, especificando que queremos sdist
:
python setup.py sdist
Esto creará nuestro paquete de distribución e información de huevo, y dará como resultado una estructura de carpetas como esta, con nuestro paquete en dist
:
.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
En este punto, tenemos un paquete que podemos instalar usando pip
, así que desde la raíz de nuestro proyecto (suponiendo que tenga todos los nombres como en este ejemplo):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
Si todo va bien, ahora podemos abrir un intérprete de Python, diría que en algún lugar fuera de nuestro directorio de proyectos para evitar confusiones, y tratar de usar nuestro nuevo paquete brillante:
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hellostackoverflow import hellostackoverflow
>>> hellostackoverflow.greeting()
'Hello Stack Overflow!'
Ahora que hemos confirmado que el paquete se instala y funciona, podemos subirlo a PyPI.
Dado que no queremos contaminar el repositorio en vivo con nuestros experimentos, creamos una cuenta para el repositorio de prueba e instalamos twine
para el proceso de carga:
pip install twine
Ahora estamos casi allí, con nuestra cuenta creada, simplemente le pedimos twine
que cargue nuestro paquete, solicitará nuestras credenciales y cargará nuestro paquete en el repositorio especificado:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Ahora podemos iniciar sesión en nuestra cuenta en el repositorio de prueba de PyPI y maravillarnos con nuestro paquete recién cargado por un tiempo, y luego tomarlo usando pip
:
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
Como podemos ver, el proceso básico no es muy complicado. Como dije antes, hay mucho más de lo que se trata aquí, así que continúe y lea el tutorial para obtener una explicación más detallada.