Empaquetamiento de Proyectos Python para Distribución y Reutilización

Empaquetar un proyecto Python para que otros puedan reutilizarlo es una tarea común. A continuación, se describen varios métodos para lograrlo.

Método 1: Crear un paquete con archivos fuente

Para distriubir el código fuente, se recomienda utilizar setuptools. Primero, configure el archivo de metadatos del paquete, comúnmente denominado setup.py, en el directorio raíz del proyecto.

from setuptools import setup, find_packages

# Intentar leer el archivo README para la descripción larga
try:
    with open("README.md", "r", encoding="utf-8") as archivo:
        desc_larga = archivo.read()
except FileNotFoundError:
    desc_larga = ""

setup(
    name='ejemplo_paquete',
    version='1.0.0',
    packages=find_packages(),
    install_requires=[
        'requests>=2.25.0',
        'pandas>=1.3.0'
    ],
    extras_require={
        'desarrollo': ['pytest>=6.2', 'flake8>=3.9'],
        'documentacion': ['sphinx>=4.0']
    },
    entry_points={
        'console_scripts': [
            'comando_ejemplo=ejemplo_paquete.cli:main'
        ]
    },
    author='Nombre del Autor',
    author_email='correo@ejemplo.com',
    description='Descripción breve del paquete',
    long_description=desc_larga,
    long_description_content_type='text/markdown',
    url='https://github.com/usuario/ejemplo_paquete',
    license='MIT',
    classifiers=[
        'Programming Language :: Python :: 3',
        'Operating System :: OS Independent',
    ],
    python_requires='>=3.6',
    include_package_data=True,
)

Las dependencias en install_requires pueden especificarse de varias formas: solo el nombre del paquete, con versiones exactas, con rangos de versión, o con extras opcionales. Por ejemplo, 'numpy>=1.20' asegura una versión mínima, mientras que 'django>=3.2, <4.0' limita el rango mayor.

Adicionalmente, cree un archivo MANIFEST.in para incluir archivos adicionales en el paquete fuente.

include LICENSE
include README.md
recursive-include datos *.csv *.json
recursive-include configuracion *.yaml
exclude *.pyc
exclude __pycache__/*

Para generar el paquete, ejecute el siguiente comando en la terminal:

python setup.py sdist bdist_wheel

Esto creará una carpeta dist con archivos .tar.gz y .whl. Los usuarios pueden instalar el paquete con pip install archivo.tar.gz o pip install archivo.whl.

Nota: En versiones de Python anteriores a 3.3, cada directorio debe contener un archivo __init__.py vacío para ser reconocido como paquete. Al reempaquetar, elimine los directorios build, dist y *.egg-info.

Método 2: Instalación directa en el entorno Python

Si el objetivo es instalar el módulo directamente en el intérprete de Python, simplifique el archivo setup.py.

from setuptools import setup

setup(
    name='mi_modulo',
    version='0.1',
    packages=['mi_modulo'],
)

Ejecute pip install . desde el directorio raíz. Los usuarios podrán importar el módulo directamente con import mi_modulo.

Método 3: Colocación manual en el directorio site-packages

Encuentre la ruta de los pqauetes instalados con el comando:

python -m site

Copie el paquete o módulo en el directorio site-packages indicado. Asegúrese de incluir __init__.py si es un paquete con subdirectorios.

Método 4: Métodos temporales

Para uso temporal, modifique la variable de entorno PYTHONPATH:

export PYTHONPATH=/ruta/a/tu/modulo:$PYTHONPATH

O, dentro de un script Python, añada la ruta manualmente:

import sys
sys.path.insert(0, '/ruta/a/tu/modulo')

Luego, importe el módulo con import nombre_modulo.

El archivo __init__.py es opcional en Python 3.3 y versiones posteriores, ya que los dierctorios se consideran paquetes de forma implantada. Sin embargo, se puede usar para inicializar el paquete.

Etiquetas: Python setuptools pip empaquetamiento MANIFEST.in

Publicado el 5-30 11:57