Pregunta

Puede alguien explicar por favor, ¿cuál es setup.py y cómo puede ser configurado o utilizado?

¿Fue útil?

Solución

setup.py es un archivo de pitón, que por lo general se 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 la distribución de módulos de Python.

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

$ pip install . 

pip utilizará setup.py instalar el módulo. setup.py evitar llamar directamente.

https://docs.python.org/3/installing/ index.html # instalación-index

Otros consejos

Esto ayuda a instalar un paquete foo pitón en su máquina (también puede estar en virtualenv) de manera que puede importar el paquete de foo de otros proyectos y también de [I] Python solicita.

Se hace el trabajo similar de pip, easy_install etc.,


Uso setup.py

Vamos a empezar con algunas definiciones:

Paquete -. Una carpeta / directorio que contiene el archivo __init__.py
Módulo -. Un archivo con extensión válida pitón .py
Distribución - ¿Cómo uno paquete se relaciona con otros paquetes y Módulos .

Supongamos que desea instalar un paquete llamado foo. Entonces haces,

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

En cambio, si no se desea instalar en realidad, pero todavía desea utilizarlo. Luego hacer,

$ python setup.py develop  

Este comando creará enlaces simbólicos en el directorio fuente dentro site-packages en lugar de copiar cosas. Debido a esto, es muy rápido (en particular para grandes paquetes).


Creación de setup.py

Si usted tiene su árbol de paquetes como,

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

A continuación, haga lo siguiente en su setup.py script para que se puede instalar en una 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 compleja como la siguiente:

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

A continuación, el 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',
           ]
)

Añadir más cosas para (setup.py) & que sea 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',
           ]
)

El long_description se utiliza en pypi.org como la descripción README de su paquete.


Y, por último, que ahora está listo para cargar el paquete a PyPi.org para que otros puedan instalar el paquete utilizando pip install yourpackage.

El primer paso es para reclamar su nombre y el espacio de montaje en PyPI usando:

$ python setup.py register

Una vez que se ha registrado el nombre del paquete, nadie puede reclamar o utilizarlo. Después de registrarse con éxito, usted tiene que cargar su paquete en ella (en la nube) por,

$ python setup.py upload

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

$ python setup.py --sign upload

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

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

Si está familiarizado con las instalaciones de la línea de comandos, a continuación, se traduce en make && make install python setup.py build && python setup.py install.

Algunos paquetes son puro Python, y sólo son bytes compilado. Otros pueden contener código nativo, lo que requerirá un compilador nativo (como gcc o cl) y un módulo de interfaz Python (como swig o pyrex).

Si ha descargado 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 está preguntando lo que este archivo es útil para, compruebe la documentación Python en escribir el guion de instalación

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

Muchos paquetes usan el marco distutils en conjunto con setup.py.

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

setup.py se puede utilizar en dos escenarios, En primer lugar, desea instalar un paquete de Python. En segundo lugar, se desea crear su propio paquete de Python. Por lo general paquete de Python estándar tiene par de archivos importantes como setup.py, setup.cfg y Manifest.in. Cuando se crea el paquete Python, estos tres archivos determinarán la (contenido en PKG-INFO en la carpeta de huevo-info) nombre, versión, descripción, otras instalaciones necesarias (por lo general 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 se puede definir lo que debe ser incluido en el paquete. De todas formas se puede hacer montón de 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 montón de otros comandos que podrían utilizarse con setup.py. en busca de ayuda

python setup.py --help-commands

Al descargar un paquete con setup.py abrir su Terminal (Mac, Linux) o Símbolo del sistema (Windows). Usando cd y que le ayuda con el botón Tab establecer la ruta correcta a la carpeta donde ha descargado el archivo y donde no es setup.py:

iMac:~ user $ cd path/pakagefolderwithsetupfile/

Pulse Enter, debería ver algo como esto:

iMac:pakagefolderwithsetupfile user$

A continuación, escriba después de este python setup.py install:

iMac:pakagefolderwithsetupfile user$ python setup.py install

Pulse enter. Hecho!

Para instalar un paquete de Python que haya descargado, extraer el archivo y ejecuta el script setup.py interior:

python setup.py install

Para mí, esto siempre se ha sentido extraño. Sería más natural para señalar un gestor de paquetes en la descarga, como se haría en Ruby y nodejs, por ejemplo. gem install rails-4.1.1.gem

Un gestor de paquetes es más cómodo también, porque es conocido y fiable. Por otro lado, cada setup.py es novedoso, ya que es específica para el paquete. Exige la fe en la convención "Confío en que este setup.py toma los mismos comandos que otros que he utilizado en el pasado". Eso es un impuesto lamentable la fuerza de voluntad mental.

No estoy diciendo que el flujo de trabajo setup.py es menos seguro que un gestor de paquetes (entiendo Pip sólo se ejecuta el setup.py interior), pero sin duda creo que es awkard y discordante. Hay una armonía a todos los comandos estar a la misma aplicación gestor de paquetes. Puede ser que incluso encariñarse con él.

setup.py es un archivo de Python como cualquier otro. Se puede tomar cualquier nombre, excepto por convención se denomina setup.py por lo que no hay un procedimiento diferente con cada secuencia de comandos.

Lo más frecuente es setup.py se utiliza para instalar un módulo de Python, pero servidor otros fines:

Módulos:

Tal vez esto es el uso más famoso de setup.py está en módulos. A pesar de que se pueden instalar con pip, viejas versiones de Python no incluían pip por defecto y que tenían que ser instalado por separado.

Si se desean instalar un módulo, pero no quería instalar pip, casi la única alternativa era instalar el módulo de archivo setup.py. Esto podría lograrse a través de python setup.py install. Esto sería instalar el módulo de Python para el diccionario de la raíz (sin pip, easy_install ect).

Este método se utiliza a menudo cuando pip fallará. Por ejemplo, si la versión de Python correcta del paquete deseado no está disponible a través de pipperhaps porque ya no se mantiene, la descarga de la fuente y funcionando python setup.py install llevaría a cabo la misma cosa, excepto en el caso de los binarios compilados son necesarios, (pero no tendrá en cuenta la versión Python -a menos se devuelve un error).

Otro uso de setup.py es instalar un paquete de la fuente. Si un módulo está todavía en desarrollo los archivos de las ruedas no estará disponible y la única manera de instalar es instalar directamente desde la fuente.

ampliación de edificios Python:

Cuando un módulo se ha construido se puede convertir en el módulo listo para su distribución mediante un script de configuración. Una vez construidos estos pueden ser instalados mediante el comando anterior.

Una secuencia de comandos de configuración es fácil de construir y una vez que el archivo se ha configurado correctamente y puede ser compilado mediante la ejecución de python setup.py build (véase el enlace para todos los comandos).

Una vez que se nombra setup.py para la facilidad de uso y por convención, sino que puede tener cualquier nombre.

Cython:

Otro uso famoso de archivos setup.py incluyen extensiones compilado. Estos requieren un script de configuración con los valores definidos por el usuario. Permiten rápida (pero una vez compilado son dependientes de la plataforma) la ejecución. Aquí es un ejemplo sencillo de la documentación :

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

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

Esto puede ser compilado a través de python setup.py build

cx_Freeze:

Otro módulo que requiere una secuencia de instalación es cx_Freeze. Esto convierte a los ejecutables script Python. Esto permite que muchos comandos tales como descripciones, nombres, iconos, paquetes para incluir, excluir ect plazo y una vez producirán una aplicación distribuible. Un ejemplo de la :

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 puede ser compilado a través de python setup.py build.

¿Qué es un archivo setup.py?

En pocas palabras es un script que construye o configura algo en el ambiente Python.

Un paquete cuando distribuye sólo debe contener una secuencia de comandos de configuración, pero no es raro que combinar varios juntos en una única secuencia de comandos de configuración. Note esto implica a menudo, pero no siempre distutils (como he mostrado en mi último ejemplo). Lo que hay que recordar que sólo configura Python paquete / escritura de alguna manera.

Toma el nombre por lo que el mismo comando siempre se puede utilizar en la construcción o instalación.

Para hacerlo simple, setup.py se ejecuta como "__main__" cuando se llama al instalar funciones las otras respuestas mencionadas. Dentro setup.py, se debería poner todo lo necesario para instalar el paquete.

funciones

setup.py Común

Las dos secciones siguientes discuten dos cosas tienen muchos módulos setup.py.

setuptools.setup

Esta función le permite especificar los atributos como el nombre de la proyecto, la versión .... lo más importante, esta función le permite instalar otras funciones si están correctamente embaladas. Ver la página del para un ejemplo de setuptools.setup
Estos atributos permiten la instalación de setuptools.setup estos tipos de paquetes:

  • Paquetes que se importan a su proyecto y aparecen en PyPI usando setuptools.findpackages :

    packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])

  • Los paquetes no en PyPI , pero puede ser descargado desde una URL usando dependency_links

    dependency_links=["http://peak.telecommunity.com/snapshots/",]

Las funciones personalizadas

En un mundo ideal, setuptools.setup manejaría todo para usted. Por desgracia, esto no siempre es el caso. A veces hay que hacer cosas específicas, como la instalación de dependencias con el href="https://docs.python.org/2/library/subprocess.html" rel="nofollow noreferrer"> subproceso comando , para que el sistema se va a instalar en en el estado adecuado para su paquete. Trate de evitar esto, estas funciones a confusión y, a menudo difieren entre OS e incluso distribución .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top