Pypi UserWarning: opción de distribución desconocida: 'install_requires'
112
¿Alguien encuentra esta advertencia al ejecutar python setup.py installun paquete PyPI?
install_requiresdefine lo que requiere el paquete. Muchos paquetes de PyPI tienen esta opción. ¿Cómo puede ser una "opción de distribución desconocida"?
@tripleee quizás, pero esta pregunta se hizo antes que esa.
Tyler Long
La edad de las preguntas es una preocupación secundaria, pero no tengo una opinión sólida de ninguna manera. Si desea que la nominación duplicada sea al revés, tal vez cree una pregunta de desbordamiento de metastack para mayor visibilidad. Para mí, personalmente, la respuesta aceptada de la otra pregunta me ayudó más, porque es más directa y enfocada. Parece que nunca has aceptado ninguna de estas respuestas, por lo que ese es un factor que realmente podrías cambiar.
tripleee
1
@tripleee, si lee este hilo con atención, se dará cuenta de que no hay una respuesta perfecta en absoluto. Entonces no sé qué respuesta aceptar. No quiero engañar a la gente seleccionando una respuesta que ni siquiera puedo convencerme.
Tyler Long
Respuestas:
89
python setup.pyusa distutils que no admite install_requires. setuptools lo hace, también distribuye (su sucesor), y pip (que usa cualquiera) lo hace. Pero en realidad tienes que usarlos. Es decir, llame a setuptools a través del easy_installcomando o pip install.
Otra forma es importar la configuración de setuptools en su setup.py, pero esto no es estándar y hace que todos los que quieran usar su paquete deban tener setuptools instalados.
Digamos que quiero usar pip, entonces, ¿cómo ejecuto el setup.pyarchivo si solo quiero crear una extensión en el lugar?
Fred Foo
11
La advertencia no le impide empaquetar su código, por lo que puede ejecutarlo python setup.py sdiste instalarlo con pip install resulting_package.tar.gz. También puede usar pip install -epara instalar directamente desde la fuente, pero siempre he preferido instalar desde el paquete o desde el repositorio directamente ..
Sebastian Blask
Esto está un poco desordenado. Siempre puede intentar importar la configuración desde setuptools primero; de lo contrario, vaya con distutils y obtenga la advertencia. Sin embargo, si está en pypy, podría terminar con "Demasiados archivos abiertos" debido a que las herramientas de configuración no cierran los descriptores correctamente (incluso en Debian, con el ulimit -n predeterminado de 1024): bugs.pypy.org/issue878
fiorix
1
Vea mi respuesta: por lo que puedo decir, esto es solo un error directo en las herramientas de configuración. El usuario no está haciendo nada malo, setuptools sí.
ncoghlan
Esto responde indirectamente a mi pregunta: obtuve el error como resultado de ejecutar pip install pendulum==1.4.4. Correr pip install setuptools --upgradeborró el error.
Throw Away Account
32
Este fue el primer resultado de mi búsqueda en Google, pero no tuvo respuesta. Descubrí que la actualización de las herramientas de configuración me resolvió el problema (y pip por si acaso)
Esto también lo resolvió para mí. (Python 3.4, intentando pip3 install neovim-remote.)
Michael Iles
Esto funcionó para mí. Estaba intentando instalar mako en Python 2.7.16. Obtuve una opción de distribución desconocida similar. Pip estaba bien, pero las herramientas de configuración pasaron a 41.0.1 desde 40.6.2. Entonces Mako instaló A-OK.
Max Yaffe
18
¡ ATENCIÓN ! ¡ ATENCIÓN ! Respuesta imperfecta por delante. Para obtener el "memorando más reciente" sobre el estado del empaquetado en el universo de Python, lea este ensayo bastante detallado .
Me acabo de encontrar con este problema al intentar compilar / instalar ansible. El problema parece ser que distutils realmente no admite install_requires. Setuptools debería parchear distutils sobre la marcha, pero no es así, probablemente porque la última versión de setuptools es 0.6c11 de 2009, mientras que distutils es un proyecto central de Python.
Entonces, incluso después de instalar manualmente setuptools-0.6c11-py2.7.egg, ejecutar setup.py solo recoge distutils dist.py, y no el de site-packages / setuptools /.
Además, la documentación de setuptools sugiere cómo usar ez_setup y no distutils.
Sin embargo, las herramientas de configuración las proporciona distribuir hoy en día, y esa versión de setup () admite install_requires.
Votado en contra, ya que esta respuesta contiene cierta desinformación y confusión en cuanto a qué son las diferentes cosas. ez_setup.py, por ejemplo, es un instalador bootstrap para setuptools y no es algo que uno usaría "en lugar de" distutils. La mayoría de los paquetes de PyPI no son "simplemente incorrectos".
Iguananaut
1
@Iguananaut, gracias por revisar la respuesta; Lo he editado.
PAStheLoD
Oh genial, gracias. Volveré a votar en ese caso :) El ensayo de Nick Coghlan al que te vinculaste es uno que he compartido con mis compañeros de trabajo antes para tratar de hacer que entiendan estas cosas.
Iguananaut
Gran ensayo sobre el estado de las cosas en marzo de 2013. Una pregunta ... El autor afirma: "Los proyectos setuptoolsy distributeestán en proceso de fusionarse, pero la fusión aún no está completa (actualizaré este ensayo tan pronto como que cambia) ". ¿Alguien sabe cuál es el estado de las cosas en lo que va de 2019? Con la fecha de fin de vida útil de Python 2.7 acercándose rápidamente, muchos paquetes de Python estarán en proceso de actualización y reempaquetado.
TrinitronX
16
Estoy en una Mac con python 2.7.11. He estado jugando con la creación de proyectos extremadamente simples y directos, donde mi único requisito es que pueda ejecutar python setup.py instally setup.pyusar el comando de configuración, idealmente desde distutils. Literalmente, no hay otras importaciones o códigos aparte de los kwargs que setup()no sean los que anoto aquí.
Recibo el error cuando las importaciones de mi setup.pyarchivo son:
from distutils.core import setup
Cuando utilizo esto, recibo advertencias como
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: opción de distribución desconocida: 'entry_points' warnings.warn ( msg)
Si cambio las importaciones (y nada más ) a lo siguiente:
from distutils.core import setup
import setuptools # noqa
Las advertencias desaparecen.
Tenga en cuenta que no lo estoy usando setuptools, solo importarlo cambia el comportamiento de tal manera que ya no emite las advertencias. Para mí, esta es la causa de una diferencia realmente desconcertante en la que algunos proyectos que estoy usando dan esas advertencias y otros no.
Claramente, se está llevando a cabo alguna forma de parcheo, y se ve afectado por si se realiza o no esa importación. Probablemente esta no sea la situación para todos los que investigan este problema, pero para el entorno limitado en el que estoy trabajando, esta es la respuesta que estaba buscando.
Esto es coherente con el otro comentario (de la comunidad), que dice que los distutils deberían instalar las herramientas de configuración de monopatch, y que tenían el problema al instalar Ansible. Ansible parece haber intentado permitir instalaciones sin tener herramientas de configuración en el pasado, y luego volvió a hacerlo.
Hay muchas cosas en el aire ... pero si está buscando una respuesta simple para un proyecto simple, probablemente solo debería importar herramientas de configuración.
Agregar import setuptoolstambién resolvió milagrosamente el problema para mí en ubuntu 16.04 con python 3.5.
kuropan
8
Esta es una advertencia de distutils y es una señal de que no tiene instaladas las herramientas de instalación. Instalarlo desde http://pypi.python.org/pypi/setuptools eliminará la advertencia.
cambie from distutils.core import setupen setup.py a from setuptools import setupo refactorice su setup.py para usar solo distutilsfunciones.
Vine aquí porque no me había dado cuenta de que entry_pointsera solo una setuptoolscaracterística.
Si estás aquí queriendo convertirte setuptoolsa distutilsMe gusta:
eliminar install_requiresde setup.py y solo usar requirements.txt conpip
cambie entry_pointsa scripts( doc ) y refactorice cualquier módulo que entry_pointsdependa de que sean scripts completos con shebangs y un punto de entrada.
Estoy tratando de entender cuál es el paquete recomendado. Escribe "use solo características de distutils" y "convierte setuptools en distutils", pero también dice "entry_points era solo una característica de setuptools", ¿parece un poco contradictorio?
Si tiene un incondicional import setuptoolsen su setup.py(como debería hacerlo si usa las opciones específicas de setuptools), entonces el hecho de que el script no está fallandoImportError indica que setuptools está instalado correctamente.
Puede silenciar la advertencia de la siguiente manera:
Solamente haga esto si usa la importación incondicional que fallará completamente si las herramientas de configuración no están instaladas :)
(Veo este mismo comportamiento en un pago del repositorio de setuptools posterior a la fusión, por lo que estoy seguro de que es un error de setuptools en lugar de un problema de configuración del sistema. Espero que la distribución previa a la fusión tenga el mismo problema)
Ahora he visto esto en herramientas heredadas que usan Python2.7, donde una compilación (como un Dockerfile) instala una dependencia no fija, por ejemplo, pytest. PyTest ha eliminado la compatibilidad con Python 2.7, por lo que es posible que deba especificar la versión <la nueva versión del paquete.
O muerde la bala y convierta esa aplicación a Python 3 si es viable.
Respuestas:
python setup.py
usa distutils que no admite install_requires. setuptools lo hace, también distribuye (su sucesor), y pip (que usa cualquiera) lo hace. Pero en realidad tienes que usarlos. Es decir, llame a setuptools a través deleasy_install
comando opip install
.Otra forma es importar la configuración de setuptools en su setup.py, pero esto no es estándar y hace que todos los que quieran usar su paquete deban tener setuptools instalados.
fuente
pip
, entonces, ¿cómo ejecuto elsetup.py
archivo si solo quiero crear una extensión en el lugar?python setup.py sdist
e instalarlo conpip install resulting_package.tar.gz
. También puede usarpip install -e
para instalar directamente desde la fuente, pero siempre he preferido instalar desde el paquete o desde el repositorio directamente ..pip install pendulum==1.4.4
. Correrpip install setuptools --upgrade
borró el error.Este fue el primer resultado de mi búsqueda en Google, pero no tuvo respuesta. Descubrí que la actualización de las herramientas de configuración me resolvió el problema (y pip por si acaso)
¡Espero que esto ayude a la próxima persona a encontrar este enlace!
fuente
pip3 install neovim-remote
.)¡ ATENCIÓN ! ¡ ATENCIÓN ! Respuesta imperfecta por delante. Para obtener el "memorando más reciente" sobre el estado del empaquetado en el universo de Python, lea este ensayo bastante detallado .
Me acabo de encontrar con este problema al intentar compilar / instalar ansible. El problema parece ser que distutils realmente no admite install_requires. Setuptools debería parchear distutils sobre la marcha, pero no es así, probablemente porque la última versión de setuptools es 0.6c11 de 2009, mientras que distutils es un proyecto central de Python.
Entonces, incluso después de instalar manualmente setuptools-0.6c11-py2.7.egg, ejecutar setup.py solo recoge distutils dist.py, y no el de site-packages / setuptools /.
Además, la documentación de setuptools sugiere cómo usar ez_setup y no distutils.
Sin embargo, las herramientas de configuración las proporciona distribuir hoy en día, y esa versión de setup () admite install_requires.
fuente
setuptools
ydistribute
están en proceso de fusionarse, pero la fusión aún no está completa (actualizaré este ensayo tan pronto como que cambia) ". ¿Alguien sabe cuál es el estado de las cosas en lo que va de 2019? Con la fecha de fin de vida útil de Python 2.7 acercándose rápidamente, muchos paquetes de Python estarán en proceso de actualización y reempaquetado.Estoy en una Mac con python 2.7.11. He estado jugando con la creación de proyectos extremadamente simples y directos, donde mi único requisito es que pueda ejecutar
python setup.py install
ysetup.py
usar el comando de configuración, idealmente desde distutils. Literalmente, no hay otras importaciones o códigos aparte de los kwargs quesetup()
no sean los que anoto aquí.Recibo el error cuando las importaciones de mi
setup.py
archivo son:Cuando utilizo esto, recibo advertencias como
Si cambio las importaciones (y nada más ) a lo siguiente:
Las advertencias desaparecen.
Tenga en cuenta que no lo estoy usando
setuptools
, solo importarlo cambia el comportamiento de tal manera que ya no emite las advertencias. Para mí, esta es la causa de una diferencia realmente desconcertante en la que algunos proyectos que estoy usando dan esas advertencias y otros no.Claramente, se está llevando a cabo alguna forma de parcheo, y se ve afectado por si se realiza o no esa importación. Probablemente esta no sea la situación para todos los que investigan este problema, pero para el entorno limitado en el que estoy trabajando, esta es la respuesta que estaba buscando.
Esto es coherente con el otro comentario (de la comunidad), que dice que los distutils deberían instalar las herramientas de configuración de monopatch, y que tenían el problema al instalar Ansible. Ansible parece haber intentado permitir instalaciones sin tener herramientas de configuración en el pasado, y luego volvió a hacerlo.
https://github.com/ansible/ansible/blob/devel/setup.py
Hay muchas cosas en el aire ... pero si está buscando una respuesta simple para un proyecto simple, probablemente solo debería importar herramientas de configuración.
fuente
import setuptools
también resolvió milagrosamente el problema para mí en ubuntu 16.04 con python 3.5.Esta es una advertencia de distutils y es una señal de que no tiene instaladas las herramientas de instalación. Instalarlo desde http://pypi.python.org/pypi/setuptools eliminará la advertencia.
fuente
Instalará los encabezados que falten. Resolvió mi problema
fuente
En conclusión :
distutils
no soportainstall_requires
oentry_points
,setuptools
lo hace.cambie
from distutils.core import setup
en setup.py afrom setuptools import setup
o refactorice su setup.py para usar solodistutils
funciones.Vine aquí porque no me había dado cuenta de que
entry_points
era solo unasetuptools
característica.Si estás aquí queriendo convertirte
setuptools
adistutils
Me gusta:install_requires
de setup.py y solo usar requirements.txt conpip
entry_points
ascripts
( doc ) y refactorice cualquier módulo queentry_points
dependa de que sean scripts completos con shebangs y un punto de entrada.fuente
Por lo que puedo decir, este es un error en setuptools en el que no elimina las opciones específicas de setuptools antes de llamar a la clase base en la biblioteca estándar: https://bitbucket.org/pypa/setuptools/issue/29 / evitar-advertencias-del-usuario-emitidas-al-llamar
Si tiene un incondicional
import setuptools
en susetup.py
(como debería hacerlo si usa las opciones específicas de setuptools), entonces el hecho de que el script no está fallandoImportError
indica que setuptools está instalado correctamente.Puede silenciar la advertencia de la siguiente manera:
Solamente haga esto si usa la importación incondicional que fallará completamente si las herramientas de configuración no están instaladas :)
(Veo este mismo comportamiento en un pago del repositorio de setuptools posterior a la fusión, por lo que estoy seguro de que es un error de setuptools en lugar de un problema de configuración del sistema. Espero que la distribución previa a la fusión tenga el mismo problema)
fuente
Ahora he visto esto en herramientas heredadas que usan Python2.7, donde una compilación (como un Dockerfile) instala una dependencia no fija, por ejemplo, pytest. PyTest ha eliminado la compatibilidad con Python 2.7, por lo que es posible que deba especificar la versión <la nueva versión del paquete.
O muerde la bala y convierta esa aplicación a Python 3 si es viable.
fuente