¿Alguien puede explicar qué setup.py
es y cómo se puede configurar o usar?
python
python-3.x
setup.py
pypi
python-packaging
Software entusiasta
fuente
fuente
Respuestas:
setup.py
es un archivo python, que generalmente le dice que el módulo / paquete que está a punto de instalar ha sido empaquetado y distribuido con Distutils, que es el estándar para distribuir módulos Python.Esto le permite instalar fácilmente paquetes de Python. A menudo es suficiente escribir:
pip
usará setup.py para instalar su módulo. Evita llamarsetup.py
directamente.https://docs.python.org/3/installing/index.html#installing-index
fuente
setup.py
archivo.Ayuda a instalar un paquete de Python
foo
en su máquina (también puede estar envirtualenv
) para que pueda importar el paquetefoo
desde otros proyectos y también desde las indicaciones de [I] Python.Hace el trabajo similar de
pip
,easy_install
etc.,Utilizando
setup.py
Comencemos con algunas definiciones:
Paquete : una carpeta / directorio que contiene el
__init__.py
archivo.Módulo : un archivo Python válido con
.py
extensión.Distribución : cómo se relaciona un paquete con otros paquetes y módulos .
Digamos que desea instalar un paquete llamado
foo
. Entonces lo hacesEn cambio, si no desea instalarlo realmente, pero aún así desea utilizarlo. Entonces hazlo,
Este comando creará enlaces simbólicos al directorio fuente dentro de los paquetes del sitio en lugar de copiar cosas. Debido a esto, es bastante rápido (particularmente para paquetes grandes).
Creando
setup.py
Si tienes tu árbol de paquetes como,
Luego, hace lo siguiente en su
setup.py
script para que pueda instalarse en alguna máquina:En cambio, si su árbol de paquetes es más complejo como el siguiente:
Entonces, su
setup.py
en este caso sería como:Agregue más cosas a (
setup.py
) y hágalo decente:Se
long_description
utiliza en pypi.org como la descripción README de su paquete.Y finalmente, ahora está listo para cargar su paquete en PyPi.org para que otros puedan instalar su paquete usando
pip install yourpackage
.El primer paso es reclamar el nombre del paquete y el espacio en pypi usando:
Una vez que se registra el nombre de su paquete, nadie puede reclamarlo ni utilizarlo. Después de un registro exitoso, debe cargar su paquete allí (a la nube),
Opcionalmente, también puede firmar su paquete con
GPG
,Bonificación : vea una muestra
setup.py
de un proyecto real aquí:torchvision-setup.py
fuente
requests
) tiene este proyecto para dar explícitamente un buen ejemplo de setup.py - github.com/kennethreitz/setup.pysetup.py
es la respuesta de Python a un instalador ymake
archivo multiplataforma .Si está familiarizado con las instalaciones de línea de comandos, entonces se
make && make install
traduce enpython setup.py build && python setup.py install
.Algunos paquetes son Python puro y solo se compilan en bytes. Otros pueden contener código nativo, que requerirá un compilador nativo (como
gcc
ocl
) y un módulo de interfaz de Python (comoswig
opyrex
).fuente
python setup.py install
en realidad se ejecutapython setup.py build
primero (por lo que no necesita ejecutarlos por separado a menos que en casos específicos). Creo quemake
siempre debe ejecutarse manualmente antes de ejecutarsemake install
.make
no requiere ningún parámetro específico (u orden): depende completamente del creador deMakefile
qué "objetivos" están disponibles (y en qué orden deben invocarse). Dado que los bare (Makefile
s) generalmente no son muy portátiles, tienden a generarse usando comandos como./configure
(autotools) ocmake .
(cmake) y, por lo tanto, estos programas pueden definir si es necesario ejecutarlo explícitamentemake
antesmake install
o no.Si descargó el paquete que tiene "setup.py" en la carpeta raíz, puede instalarlo ejecutando
Si está desarrollando un proyecto y se pregunta para qué es útil este archivo, consulte la documentación de Python al escribir el Script de configuración
fuente
setup.py
es un script de Python que generalmente se entrega con bibliotecas o programas, escrito en ese lenguaje. Su propósito es la correcta instalación del software.Muchos paquetes usan el
distutils
framework en conjunción consetup.py
.http://docs.python.org/distutils/
fuente
setup.py se puede usar en dos escenarios. Primero, desea instalar un paquete de Python. En segundo lugar, desea crear su propio paquete de Python. Por lo general, el paquete estándar de Python tiene un par de archivos importantes como setup.py, setup.cfg y Manifest.in. Cuando esté creando el paquete Python, estos tres archivos determinarán el nombre (versión en PKG-INFO en la carpeta egg-info), la versión, la descripción, otras instalaciones requeridas (generalmente en el archivo .txt) y algunos otros parámetros. setup.cfg es leído por setup.py mientras se crea el paquete (podría ser tar.gz). Manifest.in es donde puede definir qué se debe incluir en su paquete. De todos modos, puedes hacer muchas cosas usando setup.py como
Hay muchos otros comandos que podrían usarse con setup.py. por ayuda
fuente
python setup.py --help-commands
. Muy útil al cavar en el setup.py.Cuando descargue un paquete con
setup.py
abra su Terminal (Mac, Linux) o Símbolo del sistema (Windows). Usandocd
y ayudándole con el botón Tab, configure la ruta a la carpeta donde descargó el archivo y donde estásetup.py
:Presione enter, debería ver algo como esto:
Luego escriba después de esto
python setup.py install
:Presione
enter
. ¡Hecho!fuente
Para instalar un paquete de Python que haya descargado, extraiga el archivo y ejecute el script setup.py dentro de:
Para mí, esto siempre se ha sentido extraño. Sería más natural señalar a un administrador de paquetes en la descarga, como se haría en Ruby y Nodejs, por ejemplo.
gem install rails-4.1.1.gem
Un administrador de paquetes también es más cómodo, porque es familiar y confiable. Por otro lado, cada uno
setup.py
es novedoso porque es específico del paquete. Exige fe en la convención "Confío en este setup.py toma los mismos comandos que otros que he usado en el pasado". Es un impuesto lamentable sobre la fuerza de voluntad mental.No estoy diciendo que el flujo de trabajo setup.py sea menos seguro que un administrador de paquetes (entiendo que Pip solo ejecuta setup.py por dentro), pero ciertamente siento que es extraño y discordante. Hay una armonía entre los comandos y todos están en la misma aplicación de administrador de paquetes. Puede que incluso te encariñes.
fuente
setup.py
es un archivo de Python como cualquier otro. Puede tomar cualquier nombre, excepto por convención, se nombrasetup.py
para que no haya un procedimiento diferente con cada script.Con mayor frecuencia
setup.py
se utiliza para instalar un módulo de Python, pero el servidor tiene otros fines:Módulos:
Quizás este es el uso más famoso de
setup.py
es en módulos. Aunque se pueden instalar usandopip
, las versiones antiguas de Python no se incluyenpip
por defecto y deben instalarse por separado.Si desea instalar un módulo pero no desea instalarlo
pip
, la única alternativa era instalar el módulo desde elsetup.py
archivo. Esto podría lograrse a través depython setup.py install
. Esto instalaría el módulo Python en el diccionario raíz (sinpip
,easy_install
ect).Este método se usa a menudo cuando
pip
fallará. Por ejemplo, si la versión correcta de Python del paquete deseado no está disponible a través depip
quizás porque ya no se mantiene, descargar la fuente y ejecutarlapython setup.py install
realizaría lo mismo, excepto en el caso de que se requieran binarios compilados, (pero ignorará el Versión de Python, a menos que se devuelva un error).Otro uso de
setup.py
es instalar un paquete desde la fuente. Si todavía se está desarrollando un módulo, los archivos de rueda no estarán disponibles y la única forma de instalarlo es instalarlo directamente desde la fuente.Construyendo extensiones de Python:
Cuando se ha construido un módulo, se puede convertir en un módulo listo para su distribución utilizando un script de configuración de distutils . Una vez construidos, estos se pueden instalar utilizando el comando anterior.
Un script de configuración es fácil de construir y una vez que el archivo se ha configurado correctamente y se puede compilar ejecutando
python setup.py build
(consulte el enlace para ver todos los comandos).Una vez más se llama así
setup.py
por su facilidad de uso y por convención, pero puede tomar cualquier nombre.Cython:
Otro uso famoso de
setup.py
archivos incluye extensiones compiladas. Estos requieren un script de configuración con valores definidos por el usuario. Permiten una ejecución rápida (pero una vez compilada dependen de la plataforma). Aquí hay un ejemplo simple de la documentación :Esto se puede compilar a través de
python setup.py build
Cx_Freeze:
Otro módulo que requiere un script de configuración es
cx_Freeze
. Esto convierte el script de Python en ejecutables. Esto permite que muchos comandos, como descripciones, nombres, iconos, paquetes, incluyan, excluyan ect y, una vez ejecutados, producirán una aplicación distribuible. Un ejemplo de la documentación :Esto se puede compilar a través de
python setup.py build
.Entonces, ¿qué es un
setup.py
archivo?En pocas palabras, es un script que construye o configura algo en el entorno Python.
Un paquete distribuido debe contener solo un script de configuración, pero no es raro combinar varios en un solo script de configuración. Tenga en cuenta que esto a menudo implica
distutils
pero no siempre (como mostré en mi último ejemplo). Lo que hay que recordar es que solo configura el paquete / script Python de alguna manera.Toma el nombre para que siempre se pueda usar el mismo comando al construir o instalar.
fuente
Para hacerlo simple, setup.py se ejecuta como
"__main__"
cuando llama a las funciones de instalación que mencionan las otras respuestas. Dentro de setup.py, debe poner todo lo necesario para instalar su paquete.Funciones comunes de setup.py
Las siguientes dos secciones analizan dos cosas que tienen muchos módulos setup.py.
setuptools.setup
Esta función le permite especificar atributos del proyecto como el nombre del proyecto, la versión ... Lo más importante, esta función le permite instalar otras funciones si están empaquetadas correctamente. Consulte esta página web para ver un ejemplo de setuptools.setup.
Estos atributos de setuptools.setup permiten instalar estos tipos de paquetes:
Paquetes importados a su proyecto y listados en PyPI usando setuptools.findpackages :
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
Paquetes que no están en PyPI , pero se pueden descargar desde una URL usando dependency_links
dependency_links=["http://peak.telecommunity.com/snapshots/",]
Funciones personalizadas
En un mundo ideal,
setuptools.setup
manejaría todo por ti. Lamentablemente, este no es siempre el caso. A veces tiene que hacer cosas específicas, como instalar dependencias con el comando de subproceso , para obtener el sistema en el que está instalando en el estado correcto para su paquete. Intente evitar esto, estas funciones se vuelven confusas y a menudo difieren entre el sistema operativo e incluso la distribución .fuente