web-dev-qa-db-fra.com

pypi UserWarning: option de distribution inconnue: 'install_requires'

Quelqu'un rencontre-t-il cet avertissement lors de l'exécution de python setup.py install d'un paquet PyPI?

install_requires définit ce dont le paquet a besoin. Beaucoup de paquets PyPI ont cette option. Comment peut-il être une "option de distribution inconnue"?

91
Tyler Long

python setup.py utilise des distutils qui ne supportent pas install_requires. setuptools distribue également (son successeur) et pip (qui utilise l'un ou l'autre) le fait. Mais vous devez réellement les utiliser. C'est à dire. appelez setuptools par le easy_install commande ou pip install.

Une autre méthode consiste à importer la configuration à partir de setuptools dans votre fichier setup.py, mais cela n’est pas standard et oblige tous ceux qui souhaitent utiliser votre paquet doivent avoir installé setuptools.

80
Sebastian Blask

C'était le premier résultat de ma recherche google, mais je n'avais pas de réponse. J'ai constaté que la mise à niveau de setuptools avait résolu le problème pour moi (et pip pour une bonne mesure)

pip install --upgrade pip
pip install --upgrade setuptools

J'espère que cela aide la prochaine personne à trouver ce lien!

17
Matt

[~ # ~] attention [~ # ~] ! [~ # ~] attention [~ # ~] ! Réponse imparfaite à venir. Pour obtenir le "dernier mémo" sur l'état de l'emballage dans l'univers Python, lisez cet essai assez détaillé .

Je viens de rencontrer ce problème en essayant de construire/installer ansible. Le problème semble être que distutils vraiment ne supporte pas install_requires. Setuptools devrait monkey-patch distutils à la volée, mais ce n'est pas le cas, probablement parce que la dernière version de setuptools est la version 0.6c11 de 2009, alors que distutils est un noyau Python projet.

Ainsi, même après avoir installé manuellement setuptools-0.6c11-py2.7.Egg, le fichier setup.py ne récupère que distutils dist.py, et non celui de site-packages/setuptools /.

La documentation de setuptools suggère également l'utilisation de ez_setup et non de distutils.

Cependant, setuptools est lui-même fourni par distribuer de nos jours, et cette variante de setup () supporte install_requires.

15
PAStheLoD

Je suis sur un Mac avec python 2.7.11. Je me suis amusé à créer des projets extrêmement simples et directs, où ma seule exigence est de pouvoir exécuter python setup.py install, Et setup.py utilise la commande de configuration, idéalement de distutils. Il n’existe littéralement aucune autre importation ou code en dehors du kwargs vers setup() autre que ce que je note ici.

J'obtiens l'erreur lorsque les importations pour mon fichier setup.py Sont:

from distutils.core import setup

Lorsque je l'utilise, je reçois des avertissements tels que

/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: option de distribution inconnue: 'entry_points' warnings.warn ( msg)

Si je modifie les importations (et rien d'autre ) par ce qui suit:

from distutils.core import setup
import setuptools  # noqa

Les avertissements s'en vont.

Notez que je n’utilise pas setuptools, mais que l’important change le comportement de sorte qu’il n’émette plus les avertissements. Pour moi, c'est la cause d'une différence vraiment déconcertante: certains projets que j'utilise donnent ces avertissements, d'autres non.

Il est clair qu'une forme de correctif de singe est en cours et qu'elle est affectée par le fait que l'importation soit ou non effectuée. Ce n’est probablement pas le cas pour tous ceux qui recherchent ce problème, mais pour l’environnement étroit dans lequel je travaille, c’est la réponse que je cherchais.


Ceci est cohérent avec l'autre commentaire (de communauté), qui dit que distutils doit monkeypatch setuptools, et qu'ils ont eu le problème lors de l'installation de Ansible. Ansible semble avoir tenté d'autoriser les installations sans avoir configuré setuptools par le passé, puis est revenu sur cette question.

https://github.com/ansible/ansible/blob/devel/setup.py

Il y a beaucoup de choses en suspens ... mais si vous cherchez une réponse simple à un projet simple, vous devriez probablement importer simplement setuptools.

9
AlanSE

Ceci est un avertissement de distutils et indique que vous n'avez pas installé setuptools. L'installer à partir de http://pypi.python.org/pypi/setuptools supprimera l'avertissement.

8
Fredrik Håård
Sudo apt-get install python-dev  # for python2.x installs
Sudo apt-get install python3-dev  # for python3.x installs

Il installera les en-têtes manquants. Ça a résolu mon problème

4
Priyanshu Chauhan

Autant que je sache, il s'agit d'un bogue dans setuptools dans lequel il n'est pas nécessaire de supprimer les options spécifiques à setuptools avant d'appeler la classe de base dans la bibliothèque standard: https://bitbucket.org/pypa/setuptools/issue/29/Avoid-Userwarnings-Emitted-When-Call-)

Si vous avez un inconditionnel import setuptools dans votre setup.py (comme vous devriez le faire si vous utilisez les options spécifiques à setuptools), le fait que le script n’échoue pas avec ImportError indique que setuptools est correctement installé.

Vous pouvez désactiver l'avertissement de la manière suivante:

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>

Seulement faites ceci si vous utilisez l'importation inconditionnelle qui échouera complètement si setuptools n'est pas installé :)

(Je constate ce même comportement dans une extraction du référentiel setuptools post-fusion, raison pour laquelle je suis convaincu que c'est un bogue setuptools plutôt qu'un problème de configuration système. Je m'attends à ce que la distribution avant la fusion présente le même problème)

2
ncoghlan

Je l'ai maintenant vu dans des outils existants utilisant Python2.7, où une construction (comme un fichier Docker) installe une dépendance non épinglée, par exemple pytest. PyTest a perdu le support Python 2.7, il vous faudra donc peut-être spécifier la version <la nouvelle version du paquet.

Ou mordez la balle et convertir cette application en Python 3 si cela est viable.

0
Danny Staple