Python Language
Creando paquetes de Python
Buscar..
Observaciones
El proyecto de ejemplo pypa contiene una plantilla setup.py
fácilmente modificable y completa que demuestra una amplia gama de capacidades que las herramientas de configuración pueden ofrecer.
Introducción
Cada paquete requiere un archivo setup.py
que describe el paquete.
Considere la siguiente estructura de directorio para un paquete simple:
+-- package_name
| |
| +-- __init__.py
|
+-- setup.py
El __init__.py
contiene solo la línea def foo(): return 100
.
El siguiente setup.py
definirá el paquete:
from setuptools import setup
setup(
name='package_name', # package name
version='0.1', # version
description='Package Description', # short description
url='http://example.com', # package URL
install_requires=[], # list of packages this package depends
# on.
packages=['package_name'], # List of module names that installing
# this package will provide.
)
virtualenv es ideal para probar las instalaciones de paquetes sin modificar sus otros entornos de Python:
$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
$ python setup.py install
running install
...
Installed .../package_name-0.1-....egg
...
$ python
>>> import package_name
>>> package_name.foo()
100
Subiendo a PyPI
Una vez que su setup.py
sea completamente funcional (vea Introducción ), es muy fácil cargar su paquete a PyPI .
Configurar un archivo .pypirc
Este archivo almacena inicios de sesión y contraseñas para autenticar sus cuentas. Normalmente se almacena en su directorio personal.
# .pypirc file
[distutils]
index-servers =
pypi
pypitest
[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password
[pypitest]
repository=https://testpypi.python.org/pypi
username=your_username
password=your_password
Es más seguro usar twine
para cargar paquetes, así que asegúrese de que esté instalado.
$ pip install twine
Registrarse y subir a testpypi (opcional)
Nota : PyPI no permite sobrescribir paquetes cargados , por lo que es prudente probar primero su implementación en un servidor de prueba dedicado, por ejemplo, testpypi. Esta opción será discutida. Considere un esquema de control de versiones para su paquete antes de cargar, como el control de versiones del calendario o el control de versiones semántico .
Inicie sesión o cree una nueva cuenta en testpypi . El registro solo se requiere la primera vez, aunque registrarse más de una vez no es perjudicial.
$ python setup.py register -r pypitest
Mientras que en el directorio raíz de su paquete:
$ twine upload dist/* -r pypitest
Su paquete ahora debe ser accesible a través de su cuenta.
Pruebas
Realiza un entorno virtual de prueba. Intente pip install
su paquete desde testpypi o PyPI.
# Using virtualenv
$ mkdir testenv
$ cd testenv
$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
# Test from testpypi
(.virtualenv) pip install --verbose --extra-index-url https://testpypi.python.org/pypi package_name
...
# Or test from PyPI
(.virtualenv) $ pip install package_name
...
(.virtualenv) $ python
Python 3.5.1 (default, Jan 27 2016, 19:16:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import package_name
>>> package_name.foo()
100
Si tiene éxito, su paquete es menos importable. Puede considerar probar su API también antes de su carga final a PyPI. Si el paquete falló durante la prueba, no se preocupe. Aún puedes arreglarlo, volver a subirlo a testpypi y probar de nuevo.
Registrarse y subir a PyPI
Asegúrate de que el twine
esté instalado:
$ pip install twine
Inicie sesión o cree una nueva cuenta en PyPI .
$ python setup.py register -r pypi
$ twine upload dist/*
¡Eso es! Su paquete ya está en vivo .
Si descubre un error, simplemente cargue una nueva versión de su paquete.
Documentación
No olvide incluir al menos algún tipo de documentación para su paquete. PyPi toma como idioma de formato predeterminado reStructuredText .
Readme
Si su paquete no tiene una gran documentación, incluya lo que puede ayudar a otros usuarios en el archivo README.rst
. Cuando el archivo está listo, se necesita otro para decirle a PyPi que lo muestre.
Cree el archivo setup.cfg
y ponga estas dos líneas en él:
[metadata]
description-file = README.rst
Tenga en cuenta que si intenta colocar el archivo Markdown en su paquete, PyPi lo leerá como un archivo de texto puro sin ningún formato.
Licenciamiento
A menudo es más que bienvenido poner un archivo LICENSE.txt
en su paquete con una de las licencias de OpenSource para informar a los usuarios si pueden usar su paquete, por ejemplo, en proyectos comerciales o si su código se puede usar con su licencia.
De manera más legible, algunas licencias se explican en TL; DR .
Haciendo paquete ejecutable
Si su paquete no es solo una biblioteca, sino que tiene una pieza de código que puede usarse como una vitrina o una aplicación independiente cuando su paquete está instalado, coloque esa pieza de código en el archivo __main__.py
.
Ponga la __main__.py
en el package_name
carpeta. De esta manera podrás ejecutarlo directamente desde la consola:
python -m package_name
Si no hay __main__.py
archivo __main__.py
disponible, el paquete no se ejecutará con este comando y se imprimirá este error:
python: No hay un módulo llamado
package_name.__main__;
'package_name' es un paquete y no se puede ejecutar directamente.