python - repositorio - upgrade pip
¿Qué es setup.py? (10)
Ayuda a instalar un paquete foo
python 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] avisos de Python.
Hace el trabajo similar de pip
, easy_install
etc.,
Usando setup.py
Comencemos con algunas definiciones:
Paquete : una carpeta / directorio que contiene el archivo __init__.py
.
Módulo - Un archivo python válido con extensión .py
.
Distribución : cómo se relaciona un paquete con otros paquetes y módulos .
Digamos que quieres instalar un paquete llamado foo
. Entonces tu haces
$ git clone https://github.com/user/foo
$ cd foo
$ python setup.py install
En su lugar, si no desea instalarlo realmente, pero todavía desea utilizarlo. Entonces hazlo,
$ python setup.py develop
Este comando creará enlaces simbólicos al directorio de origen dentro de los paquetes de sitio en lugar de copiar cosas. Debido a esto, es bastante rápido (especialmente para paquetes grandes).
Creando setup.py
Si tienes tu árbol de paquetes como,
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
└── setup.py
Luego, haga lo siguiente en su script setup.py
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=''[email protected]'',
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, su 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=''[email protected]'',
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 setup.py
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=''[email protected]'',
url="http://www.foopackage.com/",
packages=[''foo''], #same as name
install_requires=[''bar'', ''greek''], #external packages as dependencies
scripts=[
''scripts/cool'',
''scripts/skype'',
]
)
long_description
se usa en pypi.org como la descripción README de su paquete.
Y finalmente, ya 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 y espacio de tu paquete en pypi usando:
$ python setup.py register
Una vez que el nombre de su paquete está registrado, nadie puede reclamarlo o usarlo. Después de un registro exitoso, debe cargar su paquete allí (en la nube) de,
$ python setup.py upload
Opcionalmente, también puede firmar su paquete con GPG
mediante,
$ python setup.py --sign upload
Bonificación : vea un ejemplo de setup.py
de un proyecto real aquí: torchvision-setup.py
¿Alguien puede explicar, qué es setup.py
y cómo puede configurarse o usarse?
Cuando descargue un paquete con setup.py
abra su Terminal (Mac, Linux) o Símbolo del sistema (Windows). Usando cd
y ayudándole con el botón Tab, establezca la ruta correcta a la carpeta donde ha descargado el archivo y donde está setup.py
:
iMac:~ user $ cd path/pakagefolderwithsetupfile/
Presiona enter, deberías ver algo como esto:
iMac:pakagefolderwithsetupfile user$
Luego escribe después de esta instalación de python setup.py install
:
iMac:pakagefolderwithsetupfile user$ python setup.py install
Presione enter
. ¡Hecho!
Para hacerlo simple, setup.py se ejecuta como "__main__"
cuando llama a las funciones de instalación, las otras respuestas mencionadas. Dentro de setup.py, debes poner todo lo necesario para instalar tu 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 ... Lo más importante es que esta función le permite instalar otras funciones si están empaquetadas correctamente. Ver esta página web para un ejemplo de setuptools.setup
Estos atributos de setuptools.setup permiten instalar estos tipos de paquetes:
Los paquetes que se importan a su proyecto y se enumeran en PyPI utilizando setuptools.findpackages :
packages = find_packages (exclude = ["docs", "tests", ".gitignore", "README.rst", "DESCRIPTION.rst"])
Los paquetes 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. Desafortunadamente este no es siempre el caso. A veces tiene que hacer cosas específicas, como instalar dependencias con el comando de subprocess , para obtener el sistema que está instalando en el estado correcto para su paquete. Trate de evitar esto, estas funciones se vuelven confusas y a menudo difieren entre el OS e incluso la distribution .
Para instalar un paquete de Python que ha descargado, extraiga el archivo y ejecute el script setup.py en:
python setup.py install
Para mí, esto siempre me ha parecido extraño. Sería más natural apuntar un gestor de paquetes a la descarga, como lo haría uno 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 setup.py
es novedoso, porque es específico del paquete. Exige fe en la convención "Confío en que este setup.py toma los mismos comandos que otros que he usado en el pasado". Ese es un impuesto lamentable sobre la fuerza de voluntad mental.
No estoy diciendo que el flujo de trabajo de setup.py sea menos seguro que un administrador de paquetes (entiendo que Pip simplemente ejecuta setup.py en su interior), pero ciertamente creo que es incómodo y discordante. Hay una armonía para que todos los comandos estén en la misma aplicación del administrador de paquetes. Incluso puede que te guste.
Si descargó un 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 la documentación de Python al escribir el script de configuración
setup.py se puede usar en dos escenarios. Primero, desea instalar un paquete de Python. Segundo, quieres crear tu 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 (contenido en PKG-INFO en la carpeta de información de huevos), 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 puede definir lo que debe incluirse en su paquete. De todas formas puedes hacer un 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 un montón de otros comandos que podrían usarse con setup.py. por ayuda
python setup.py --help-commands
setup.py
es la respuesta de Python a un instalador multiplataforma y setup.py
un archivo.
Si está familiarizado con las instalaciones de la línea de comandos, make && make install
traduce a python 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
o cl
) y un módulo de interfaz Python (como swig
o pyrex
).
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.
La mayoría de las veces, setup.py
se usa para instalar un módulo de Python pero para otros propósitos del servidor:
Módulos:
Quizás este es el uso más famoso de setup.py
en los módulos. Aunque se pueden instalar utilizando pip
, las versiones antiguas de Python no incluían pip
por defecto y debían instalarse por separado.
Si desea instalar un módulo pero no desea instalar pip
, la única alternativa es instalar el módulo desde el archivo setup.py
. Esto podría lograrse mediante la instalación 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 utiliza a menudo cuando fallará pip
. Por ejemplo, si la versión correcta de Python del paquete deseado no está disponible a través de pip
tal vez porque ya no se mantiene, la descarga de la fuente y la ejecución de python setup.py install
lo mismo, excepto en el caso de los archivos 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 aún está en desarrollo, los archivos de la rueda no estarán disponibles y la única forma de instalar es instalar desde la fuente directamente.
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 instalarse usando el comando anterior.
Una secuencia de comandos de configuración es fácil de compilar y una vez que el archivo se ha configurado correctamente y puede compilarse ejecutando python setup.py build
(ver enlace para todos los comandos).
Una vez más, se llama setup.py
por su facilidad de uso y por convención, pero puede tomar cualquier nombre.
Cython:
Otro uso famoso de los archivos setup.py
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 depende de la plataforma). Aquí hay un ejemplo simple de la documentation :
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 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 documentation :
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 archivo setup.py
?
Simplemente, es un script que crea o configura algo en el entorno Python.
Un paquete cuando se distribuye debe contener solo un script de configuración, pero no es infrecuente combinar varios juntos en un solo script de configuración. Note que esto a menudo involucra distutils
pero no siempre (como lo mostré en mi último ejemplo). Lo que hay que recordar es que solo 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.
setup.py
es un archivo de Python, que generalmente le dice 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 módulos de Python.
Esto le permite instalar fácilmente paquetes de Python. A menudo basta con escribir:
$ python setup.py install
y el módulo se instalará solo.
setup.py
es un script de Python que normalmente se entrega con bibliotecas o programas, escrito en ese idioma. Su propósito es la correcta instalación del software.
Muchos paquetes utilizan el marco distutils
junto con setup.py
.