Quelqu'un rencontre-t-il cet avertissement lors de l'exécution python setup.py install
d'un package PyPI?
install_requires
définit ce dont le package a besoin. De nombreux packages PyPI ont cette option. Comment cela peut-il être une "option de distribution inconnue"?
Réponses:
python setup.py
utilise distutils qui ne prend pas en charge install_requires. setuptools le fait, distribue également (son successeur) et pip (qui utilise l'un ou l'autre) le font. Mais vous devez en fait les utiliser. C'est-à-dire appeler setuptools via laeasy_install
commande oupip install
.Une autre façon est d'importer la configuration de setuptools dans votre setup.py, mais ce n'est pas standard et oblige tous ceux qui souhaitent utiliser votre package à installer setuptools.
la source
pip
, comment puis-je exécuter lesetup.py
fichier si je souhaite uniquement créer une extension sur place?python setup.py sdist
et l'installer avecpip install resulting_package.tar.gz
. Vous pouvez également utiliserpip install -e
pour installer directement à partir des sources, mais j'ai toujours préféré installer à partir du package ou du référentiel directement ..pip install pendulum==1.4.4
. L'exécution apip install setuptools --upgrade
effacé l'erreur.C'était le premier résultat de ma recherche Google, mais il n'y avait pas de réponse. J'ai trouvé que la mise à niveau de setuptools a résolu le problème pour moi (et pip pour faire bonne mesure)
J'espère que cela aidera la prochaine personne à trouver ce lien!
la source
pip3 install neovim-remote
.)ATTENTION ! ATTENTION ! Réponse imparfaite à venir. Pour obtenir le "dernier mémo" sur l'état du packaging 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 ne prend vraiment pas en charge 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 0.6c11 de 2009, alors que distutils est un projet Python principal.
Ainsi, même après avoir installé manuellement setuptools-0.6c11-py2.7.egg, l'exécution de setup.py ne récupère que distutils dist.py, et non celui de site-packages / setuptools /.
La documentation de setuptools indique également l'utilisation de ez_setup et non de distutils.
Cependant, setuptools est lui-même fourni par distribuer de nos jours, et cette saveur de setup () prend en charge install_requires.
la source
setuptools
etdistribute
sont en train de fusionner, mais la fusion n'est pas encore terminée (je mettrai à jour cet essai dès que qui change). " Est-ce que quelqu'un sait quel est l'état des choses en 2019? Avec la date de fin de vie de Python 2.7 approchant rapidement, de nombreux packages Python seront en cours de mise à jour et de reconditionnement.Je suis sur un Mac avec python 2.7.11. J'ai joué avec la création de projets extrêmement simples et directs, où ma seule exigence est que je puisse exécuter
python setup.py install
etsetup.py
utiliser la commande setup, idéalement à partir de distutils. Il n'y a littéralement aucune autre importation ou code en dehors des kwargs àsetup()
part ce que je note ici.J'obtiens l'erreur lorsque les importations de mon
setup.py
fichier sont:Lorsque j'utilise ceci, je reçois des avertissements tels que
Si je change les importations (et rien d'autre ) comme suit:
Les avertissements disparaissent.
Notez que je n'utilise pas
setuptools
, il suffit de l' importer pour changer le comportement de sorte qu'il n'émette plus les avertissements. Pour moi, c'est la cause d'une différence vraiment déconcertante où certains projets que j'utilise donnent ces avertissements, et d'autres pas.De toute évidence, une certaine forme de patching de singe est en cours, et elle dépend du fait que l'importation soit effectuée ou non. Ce n'est probablement pas la situation pour tous ceux qui recherchent ce problème, mais pour l'environnement restreint dans lequel je travaille, c'est la réponse que je cherchais.
Ceci est cohérent avec l'autre commentaire (de la communauté), qui dit que les distutils devraient monkeypatch setuptools, et qu'ils ont eu le problème lors de l'installation d'Ansible. Ansible semble avoir essayé d'autoriser les installations sans avoir installé setuptools dans le passé, puis y est revenu.
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 pour un projet simple, vous devriez probablement importer simplement setuptools.
la source
import setuptools
également résolu miraculeusement le problème pour moi sur ubuntu 16.04 avec python 3.5.Ceci est un avertissement de distutils, et c'est un signe que vous n'avez pas installé setuptools. L'installer à partir de http://pypi.python.org/pypi/setuptools supprimera l'avertissement.
la source
Il installera tous les en-têtes manquants. Cela a résolu mon problème
la source
En conclusion :
distutils
ne prend pas en chargeinstall_requires
ouentry_points
,setuptools
fait.changement
from distutils.core import setup
dans setup.py àfrom setuptools import setup
ou refactor votre setup.py d'utiliser uniquementdistutils
fonctionnalités.Je suis venu ici parce que je n'avais pas réalisé
entry_points
que ce n'était qu'unesetuptools
fonctionnalité.Si vous souhaitez vous convertir
setuptools
pourdistutils
m'aimer:install_requires
de setup.py et utiliser simplement requirements.txt avecpip
entry_points
enscripts
( doc ) et refactoriser tous les modules en s'appuyant surentry_points
des scripts complets avec des shebangs et un point d'entrée.la source
Pour autant que je sache, il s'agit d'un bogue dans setuptools où il ne supprime pas les options spécifiques de setuptools avant d'appeler la classe de base dans la bibliothèque standard: https://bitbucket.org/pypa/setuptools/issue/29 / éviter-userwarnings-emitted-when-call
Si vous avez un inconditionnel
import setuptools
dans votresetup.py
(comme vous devriez le faire si vous utilisez les options spécifiques de setuptools), le fait que le scriptImportError
n'échoue pas indique que setuptools est correctement installé.Vous pouvez désactiver l'avertissement comme suit:
Ne faites cela que si vous utilisez l'importation inconditionnelle qui échouera complètement si setuptools n'est pas installé :)
(Je vois ce même comportement lors d'une vérification du repo post-fusion setuptools, c'est pourquoi je suis convaincu qu'il s'agit d'un bogue setuptools plutôt que d'un problème de configuration système. Je m'attends à ce que la distribution avant la fusion ait le même problème)
la source
J'ai maintenant vu cela dans les outils hérités utilisant Python2.7, où une construction (comme un Dockerfile) installe une dépendance non épinglée, par exemple pytest. PyTest a abandonné la prise en charge de Python 2.7, vous devrez donc peut-être spécifier la version <la nouvelle version du package.
Ou mordez la balle et convertissez cette application en Python 3 si cela est viable.
la source