Pregunta ¿Qué es setup.py?


¿Alguien puede explicar, qué es setup.py y cómo se puede configurar o usar?


586
2017-09-24 14:16


origen


Respuestas:


setup.py es un archivo python, que generalmente le informa que el módulo / paquete que está a punto de instalar se ha empaquetado y distribuido con Distutils, que es el estándar para distribuir los módulos de Python.

Esto le permite instalar fácilmente paquetes de Python. A menudo es suficiente para escribir:

$ python setup.py install

y el módulo se instalará solo.

http://docs.python.org/install/index.html


384
2017-09-24 14:19



Ayuda a instalar un paquete de Python foo en su máquina (también puede estar en virtualenv) para que pueda importar el paquete foo desde otros proyectos y también desde [I] instrucciones de Python.

Hace el trabajo similar de pip, easy_install etc.,


Utilizando setup.py 

Comencemos con algunas definiciones:

Paquete - Una carpeta / directorio que contiene __init__.py archivo.
Módulo  - Un archivo python válido con .py extensión.
Distribución - Como uno paquete se relaciona con otros paquetes y módulos.

Digamos que quiere instalar un paquete llamado foo. Entonces lo haces,

$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

En cambio, si no desea instalarlo realmente, pero aún desea utilizarlo. Entonces hazlo,

$ python setup.py develop  

Este comando creará enlaces simbólicos al directorio de origen dentro de site-packages en lugar de copiar cosas. Debido a esto, es bastante rápido (particularmente para paquetes grandes).


Creando setup.py 

Si tienes el árbol de tu paquete,

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

Entonces, haces lo siguiente en tu setup.py script para que pueda instalarse en alguna máquina:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
)

En cambio, si su árbol de paquetes es más complejo como el siguiente:

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
├── scripts
│   ├── cool
│   └── skype
└── setup.py

Entonces tu setup.py en este caso sería como:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

Agrega más cosas a (setup.py) y hacerlo decente:

from setuptools import setup

with open("README", 'r') as f:
    long_description = f.read()

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   license="MIT",
   long_description=long_description,
   author='Man Foo',
   author_email='foomail@foo.com',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

los long_description se usa en pypi.org como la descripción README de tu paquete.


Y finalmente, ahora estás listo para subir tu paquete a PyPi.org para que otros puedan instalar su paquete usando pip install yourpackage.

El primer paso es reclamar el nombre y el espacio de tu paquete en pypi usando:

$ python setup.py register

Una vez que se registra el nombre de su paquete, nadie puede reclamarlo ni usarlo. Después de un registro exitoso, debe subir su paquete allí (a la nube) cerca,

$ python setup.py upload

Opcionalmente, también puede firmar su paquete con GPG por,

$ python setup.py --sign upload

Prima: Ver una muestra setup.py de un proyecto real aquí: torchvision-setup.py


156
2017-10-01 22:04



setup.py es la respuesta de Python a un instalador multiplataforma y make archivo.

Si está familiarizado con las instalaciones de línea de comando, entonces make && make install se traduce a python setup.py build && python setup.py install.

Algunos paquetes son puros de Python, y solo se compilan en bytes. Otros pueden contener código nativo, que requerirá un compilador nativo (como gcc o cl) y un módulo de interfaz de Python (como swig o pyrex)


72
2017-09-24 15:29



Si descargó el paquete que tiene "setup.py" en la carpeta raíz, puede instalarlo ejecutando

python setup.py install

Si está desarrollando un proyecto y se pregunta para qué sirve este archivo, consulte Documentación de Python sobre cómo escribir el script de instalación


43
2017-09-24 14:21



setup.py es un script de Python que generalmente se envía con bibliotecas o programas, escritos en ese idioma. Su propósito es la correcta instalación del software.

Muchos paquetes usan el distutils marco en conjunción con setup.py.

http://docs.python.org/distutils/


15
2017-09-24 14:21



setup.py se puede utilizar 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 de Python, estos tres archivos determinarán el nombre (contenido en PKG-INFO bajo la carpeta de información del huevo), la versión, la descripción, otras instalaciones necesarias (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 puedes definir qué se debe incluir en tu paquete. De todos modos puedes hacer muchas cosas usando setup.py como

python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo]  (to upload package to pypi or local repo)

Hay muchos otros comandos que podrían usarse con setup.py. por ayuda

python setup.py --help-commands

13
2018-04-18 16:29



Cuando descargas un paquete con setup.py abra su Terminal (Mac, Linux) o Símbolo del sistema (Windows). Utilizando cd  y ayudándote con el botón Tabulador, establece el camino correcto a la carpeta donde has descargado el archivo y donde hay setup.py :

iMac:~ user $ cd path/pakagefolderwithsetupfile/

Presiona intro, deberías ver algo como esto:

iMac:pakagefolderwithsetupfile user$

Luego escribe después de esto python setup.py install :

iMac:pakagefolderwithsetupfile user$ python setup.py install

prensa enter. ¡Hecho!


6
2017-09-18 10:49



Para instalar un paquete de Python que haya descargado, extraiga el archivo y ejecute el script setup.py dentro de:

python setup.py install

Para mí, esto siempre se ha sentido extraño. Sería más natural apuntar a un administrador de paquetes en la descarga, como lo haría uno en Ruby y Nodejs, por ej. gem install rails-4.1.1.gem

Un administrador de paquetes también se siente más cómodo, porque es familiar y confiable. Por otro lado, cada setup.py es novedoso, porque es específico del paquete. Exige fe en la convención "Confío en que 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 digo que el flujo de trabajo de setup.py sea menos seguro que el administrador de paquetes (entiendo que Pip solo ejecuta el setup.py dentro), pero ciertamente siento que es incómodo y discordante. Hay una armonía en todos los comandos para la misma aplicación de administrador de paquetes. Puede que incluso te guste.


6
2018-06-02 15:52



Para hacerlo simple, setup.py se ejecuta como "__main__" cuando llamas al instalar funciones las otras respuestas mencionadas. Dentro de setup.py, debe colocar todo lo necesario para instalar su paquete.

Funciones comunes de setup.py

Las siguientes dos secciones discuten 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 .... Más importante aún, esta función le permite instalar otras funciones si están bien empaquetadas. Ver esta página web para un ejemplo de setuptools.setup

Estos atributos de setuptools.setup permiten instalar estos tipos de paquetes:

Funciones personalizadas

En un mundo ideal, setuptools.setup manejaría todo por ti. Lamentablemente, este no es siempre el caso. A veces tienes que hacer cosas específicas, como instalar dependencias con el subproceso comando, para obtener el sistema que está instalando en el estado correcto para su paquete. Intente evitar esto, estas funciones se vuelven confusas y, a menudo, difieren entre OS e incluso distribución.


0
2018-02-15 16:06



setup.py es un archivo de Python como cualquier otro. Puede tomar cualquier nombre, excepto por convención, se llama setup.py para que no haya un procedimiento diferente con cada script.

Más frecuentemente setup.py se usa para instalar un módulo de Python pero el servidor tiene otros propósitos:

Módulos:

Tal vez este es el uso más famoso de setup.py está en módulos. Aunque se pueden instalar usando pip, las versiones antiguas de Python no incluían pip por defecto y necesitaban instalarse por separado.

Si desea instalar un módulo pero no desea instalarlo pip, la única alternativa era instalar el módulo setup.py archivo. Esto podría lograrse a través de python setup.py install. Esto instalaría el módulo Python en el diccionario raíz (sin pip, 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 de pipquizás porque ya no se mantiene, descargando la fuente y ejecutándose python setup.py install realizaría lo mismo, excepto en el caso de que se requieran binarios compilados, (pero ignorará la versión de Python, a menos que se devuelva un error).

Otro uso de setup.py es instalar un paquete desde la fuente. Si un módulo todavía está en desarrollo, los archivos de ruedas 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 pueden ser instalados usando el comando de arriba.

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 (ver enlace para todos los comandos).

Una vez más se llama setup.py por facilidad de uso y por convención, pero puede tomar cualquier nombre.

Cython:

Otro uso famoso de setup.py los archivos incluyen extensiones compiladas Estos requieren una secuencia de comandos de configuración con valores definidos por el usuario. Permiten la ejecución rápida (pero una vez compilada depende de la plataforma). Aquí hay un ejemplo simple de documentación:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world app',
    ext_modules = cythonize("hello.pyx"),
)

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 la secuencia de comandos de Python en ejecutables. Esto permite que muchos comandos como descripciones, nombres, iconos, paquetes incluyan, excluya ect y una vez que se ejecute producirá una aplicación distribuible. Un ejemplo de documentación:

import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} 

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "guifoo",
        version = "0.1",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("guifoo.py", base=base)])

Esto se puede compilar a través de python setup.py build.

Entonces, ¿qué es un setup.py ¿archivo?

Simplemente, es un script que crea o configura algo en el entorno de Python.

Un paquete cuando se distribuye debe contener solo un script de configuración, pero no es raro combinar varios en un solo script de configuración. Observe que esto a menudo involucra distutils pero no siempre (como lo mostré en mi último ejemplo). Lo que hay que recordar es que simplemente configura el paquete / script de Python de alguna manera.

Toma el nombre para que siempre se pueda usar el mismo comando al construir o instalar.


0
2018-03-14 00:31