_Billet original http://projects.scipy.org/numpy/ticket/1841 le 25/05/2011 par l'utilisateur trac ohe, attribué à unknown._
Bonjour,
Dans un virtualenv, avec python v2.7.1, je ne peux pas installer numpy via la directive install_requires de setuptools / distribuer.
from setuptools import setup
setup(...
install_requires=['numpy'],
...)
A python setup.py install
me donne le traçage suivant:
running install
running bdist_egg
running egg_info
writing requirements to UNKNOWN.egg-info/requires.txt
writing UNKNOWN.egg-info/PKG-INFO
writing top-level names to UNKNOWN.egg-info/top_level.txt
writing dependency_links to UNKNOWN.egg-info/dependency_links.txt
reading manifest file 'UNKNOWN.egg-info/SOURCES.txt'
writing manifest file 'UNKNOWN.egg-info/SOURCES.txt'
installing library code to build/bdist.macosx-10.6-intel/egg
running install_lib
warning: install_lib: 'build/lib' does not exist -- no Python modules to install
creating build/bdist.macosx-10.6-intel
creating build/bdist.macosx-10.6-intel/egg
creating build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/PKG-INFO -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/SOURCES.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/dependency_links.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/requires.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/top_level.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/UNKNOWN-0.0.0-py2.7.egg' and adding 'build/bdist.macosx-10.6-intel/egg' to it
removing 'build/bdist.macosx-10.6-intel/egg' (and everything under it)
Processing UNKNOWN-0.0.0-py2.7.egg
Copying UNKNOWN-0.0.0-py2.7.egg to /Users/olivier/tc/karmatest/lib/python2.7/site-packages
Adding UNKNOWN 0.0.0 to easy-install.pth file
Installed /Users/olivier/tc/karmatest/lib/python2.7/site-packages/UNKNOWN-0.0.0-py2.7.egg
Processing dependencies for UNKNOWN==0.0.0
Searching for numpy
Reading http://pypi.python.org/simple/numpy/
Reading http://numpy.scipy.org
Reading http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103
Reading http://numeric.scipy.org
Best match: numpy 1.6.0
Downloading http://sourceforge.net/projects/numpy/files/NumPy/1.6.0/numpy-1.6.0.tar.gz/download
Processing download
Running numpy-1.6.0/setup.py -q bdist_egg --dist-dir /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/egg-dist-tmp-Zr2lMr
Running from numpy source directory.Warning: distutils distribution has been initialized, it may be too late to add a subpackage commandWarning: distutils distribution has been initialized, it may be too late to add a subpackage fcompilernon-existing path in '/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils': 'site.cfg'
Warning: distutils distribution has been initialized, it may be too late to add a subpackage distutilsWarning: distutils distribution has been initialized, it may be too late to add a subpackage testingWarning: distutils distribution has been initialized, it may be too late to add a subpackage f2pyWarning: distutils distribution has been initialized, it may be too late to add an extension _sortWarning: distutils distribution has been initialized, it may be too late to add an extension multiarrayWarning: distutils distribution has been initialized, it may be too late to add an extension umathWarning: distutils distribution has been initialized, it may be too late to add an extension scalarmathWarning: distutils distribution has been initialized, it may be too late to add an extension _dotblasWarning: distutils distribution has been initialized, it may be too late to add an extension umath_testsWarning: distutils distribution has been initialized, it may be too late to add an extension multiarray_testsWarning: distutils distribution has been initialized, it may be too late to add a subpackage coreWarning: distutils distribution has been initialized, it may be too late to add an extension _compiled_baseWarning: distutils distribution has been initialized, it may be too late to add a subpackage libWarning: distutils distribution has been initialized, it may be too late to add a subpackage oldnumericWarning: distutils distribution has been initialized, it may be too late to add an extension _capiWarning: distutils distribution has been initialized, it may be too late to add a subpackage numarrayWarning: distutils distribution has been initialized, it may be too late to add an extension fftpack_liteWarning: distutils distribution has been initialized, it may be too late to add a subpackage fftWarning: distutils distribution has been initialized, it may be too late to add an extension lapack_liteWarning: distutils distribution has been initialized, it may be too late to add a subpackage linalgWarning: distutils distribution has been initialized, it may be too late to add an extension mtrandWarning: distutils distribution has been initialized, it may be too late to add a subpackage randomWarning: distutils distribution has been initialized, it may be too late to add a subpackage maWarning: distutils distribution has been initialized, it may be too late to add a subpackage matrixlibWarning: distutils distribution has been initialized, it may be too late to add a subpackage compatWarning: distutils distribution has been initialized, it may be too late to add a subpackage polynomialWarning: distutils distribution has been initialized, it may be too late to add a subpackage docWarning: distutils distribution has been initialized, it may be too late to add a subpackage numpyCould not locate executable f95
Could not locate executable f90
Could not locate executable f77
Could not locate executable xlf90
Could not locate executable xlf
Could not locate executable ifort
Could not locate executable ifc
Could not locate executable g77
Found executable /usr/local/bin/gfortran
_configtest.c:1: warning: conflicting types for built-in function ‘exp’
_configtest.c:1: warning: conflicting types for built-in function ‘exp’
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
lipo: can't figure out the architecture type of: /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-//ccLgEqLk.out
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
lipo: can't figure out the architecture type of: /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-//ccLgEqLk.out
Traceback (most recent call last):
File "setup.py", line 4, in <module>
install_requires=['numpy']
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
dist.run_commands()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
self.run_command(cmd)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/install.py", line 76, in run
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/install.py", line 104, in do_egg_install
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 211, in run
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 427, in easy_install
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 478, in install_item
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 519, in process_distribution
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 563, in resolve
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 799, in best_match
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 811, in obtain
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 446, in easy_install
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 476, in install_item
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 655, in install_eggs
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 930, in build_and_install
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 919, in run_setup
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 62, in run_setup
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 105, in run
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 64, in <lambda>
File "setup.py", line 196, in <module>
File "setup.py", line 189, in setup_package
File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/core.py", line 186, in setup
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
dist.run_commands()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
self.run_command(cmd)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/bdist_egg.py", line 167, in run
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/egg_info.py", line 8, in run
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 152, in run
File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 169, in build_sources
File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 328, in build_extension_sources
File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 385, in generate_sources
File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 410, in generate_config_h
File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 41, in check_types
File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 271, in check_types
SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel.
/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py:251: RuntimeWarning: Parent module 'numpy.distutils' not found while handling absolute import
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py", line 251, in clean_up_temporary_directory
ImportError: No module named numpy.distutils
Error in sys.exitfunc:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py", line 251, in clean_up_temporary_directory
ImportError: No module named numpy.distutils
Je n'ai aucun problème pour installer numpy avec pip install numpy
ou easy_install numpy
intérieur ou à l'extérieur de n'importe quel virtualenv.
Système d'exploitation: Mac OS 10.6.7
_ @ rgommers rédigé le 2011-05-27_
Je ne sais pas exactement quel est le problème, mais pouvez-vous le contourner en exécutant simplement un script d'installation qui installe d'abord numpy, puis votre package? S'appuyer sur ces fonctionnalités mal documentées de setuptools n'est pas une bonne idée si vous pouvez l'éviter.
Si je devais deviner, je dirais que l'appel de setuptools.setup () pour la première fois invoque un tas de magie qui gâche quelque chose pour numpy.distutils, d'où:
Running from numpy source directory.Warning: distutils distribution has been
initialized, it may be too late to add a subpackage commandWarning: distutils
distribution has been initialized, it may be too late to add a subpackage
Cet avertissement provient de distutils / misc_util.py.
_trac user ijstokes rédigé le 2011-06-08_
J'ai juste eu cette même erreur et pour moi, il semble que cela soit causé par des problèmes de dépendance. Si je réessaye le easy_install avec les autres modules, ils fonctionnent la deuxième fois. Ma meilleure estimation est que certaines dépendances ne sont "visibles" qu'après la fin de la session easy_install.
Ian
Est-il possible de résoudre ce problème à un moment donné? Cela provoque des solutions de contournement là où il devrait y avoir non IHMO. J'aimerais vraiment arriver à un point où numpy peut être spécifié dans l'option install_requires
d'un setup.py.
C'est possible, bien sûr, si quelqu'un investit du temps pour vraiment comprendre le problème et soumet une solution correcte. Ce n'est pas un prio pour moi personnellement - install_requires
devrait être évité à mon humble avis (au moins jusqu'à ce que pip et easy_install arrêtent de mettre à niveau les dépendances lors de la mise à niveau d'un paquet au moins).
Pouvez-vous confirmer que le même problème se produit toujours avec distutils / setuptools / pip modernes?
Cela fait.
Envoyé depuis mon iPad
Le 29 novembre 2013, à 7h22, njsmith [email protected] a écrit:
Pouvez-vous confirmer que le même problème se produit toujours avec les
distutils / setuptools / pip?
-
Répondez directement à cet e-mail ou consultez-le sur
Gi tHubhttps: //github.com/numpy/numpy/issues/2434#issuecomment -29485806
.
Je viens de rencontrer ce problème, je peux donc le confirmer. L'option install_requires
devrait être préférée à l'écriture d'un script d'installation personnalisé quand ce n'est pas vraiment nécessaire.
Système d'exploitation: Mac 10.8.3
Frapper ce problème à. Pas un spectacle arrêté, mais vraiment ennuyeux. Surtout parce qu'il n'est en aucun cas évident que ce soit un bogue plutôt qu'un problème d'utilisateur / d'environnement.
Je viens d'essayer de reproduire cela en installant des pandas (qui utilisent install_requires
) dans un virtualenv 2.7 créé comme:
$ virtualenv --no-site-packages nonumpy
$ source nonumpy/bin/activate
$ cd $PANDAS_DIR
$ pip install cython # needed for pandas
$ python setup.py install
Si quelqu'un peut donner un moyen facile de reproduire cela, cela aiderait.
J'ai également ce problème dans un env virtuel 2.7. os ubuntu wheezy
@zethraeus pourriez-vous fournir un ensemble de commandes pour reproduire ceci (comme dans mon commentaire ci-dessus)? C'est difficile à résoudre si nous ne pouvons pas reproduire le problème.
Salut! Désolé, cela a pris si longtemps, mais voici un reproducteur.
Merci pour l'exemple @ kejbaly2 , je peux le reproduire maintenant.
Même problème sur SO:
http://stackoverflow.com/questions/20356725/error-installing-numpy-via-setup-tools-in-virtualenv-on-ubuntu
http://stackoverflow.com/questions/19904957/installing-numpy-as-a-dependency-in-setup-py
Et dans le traqueur de bogues Red Hat: https://bugzilla.redhat.com/show_bug.cgi?id=1019924
Il y a plus de choses que pip
fait bien mais setuptools
sans rapport avec install_requires
: https://bitbucket.org/pypa/setuptools/issue/209/setup_requires-and-install_requires- ne pas
J'ai un problème très similaire en essayant d'utiliser install_requires et numpy
Voici comment je peux reproduire l'erreur sur Red Hat 6.5
https://gist.github.com/necrolyte2/530e9b39dcb0259b69d4
Pour info pour toute personne rencontrant ce problème, avec la dernière version de setuptools
, une solution de contournement consiste à ajouter NumPy à setup_requires
. Je l'ai toujours gardé dans install_requires
, donc mon setup.py
ressemble à:
setup(
...
setup_requires=["numpy"],
install_requires=["numpy"],
)
Cela fonctionne et n'installe NumPy qu'une seule fois, à la fois sur Mac OS X et Linux (non testé sous Windows).
Quant à savoir pourquoi je n'ai aucune idée.
J'ai essayé de localiser un problème similaire qui peut parfois se produire lorsque la compilation de Numpy est exécutée via setup_requires=['Numpy']
dans Astropy, quand Astropy elle-même est installée en tant que setup_requires
d'un autre pacakge (J'appelle cela 'setupception').
Je l'ai retracé jusqu'à cet ancien (mais en principe toujours pertinent, au moins un peu?) Bit de code: https://github.com/numpy/numpy/blob/9fc077332b34a7b2a90126f5ae6cc50d57162db5/numpy/distutils/core.py#L92
Dans la plupart des cas, lors de l'exécution de setup.py de Numpy, il pousse une fonction appelée configuration
dans les kwargs pour numpy.distutils.core.setup
. numpy.distutils.core.setup
à son tour sort la touche 'configuration'
des kwargs de configuration, puis configure des variables globales "magiques" dans distutils.core
, puis appelle _ lui-même_ de manière récursive . Le but de cet appel récursif est d'utiliser la machine distutils pour vérifier les arguments de ligne de commande pour les erreurs / - help.
Il appelle ensuite setup()
avec tous les packages maintenant entièrement configurés.
Là où tout cela tourne mal, c'est que le gestionnaire Configuration
parfois besoin d'appeler l'utilitaire get_distribution
pour attacher des éléments à l'objet Distribution
. La nécessité de cela est discutable. En fait, bien qu'il y ait certaines parties du code dans Configuration
qui pensent qu'il devrait pouvoir le faire, il y a d'autres parties qui pensent que s'il y a déjà une instance Distribution
attachée à distutils.core._setup_distribution
alors quelque chose ne va probablement pas (d'où la "distribution distutils a été initialisée, il est peut-être trop tard pour ajouter un sous-paquet" les avertissements que certaines personnes ont rapportés dans ce fil).
Pour sauvegarder un peu et, espérons-le, clarifier - lors de l'exécution de la fonction setup()
depuis distutils (ou setuptools), il initialise un objet Distribution
partir des setup()
kwargs, puis attribue le résultant Distribution
à la variable globale distutils.core._setup_distribution
. À aucun moment, il ne nettoie réellement cette variable car il suppose que c'est la configuration _only_ qui va s'exécuter dans l'interpréteur Python actuel. Il n'a pas été conçu pour setupception. (pip contourne ce problème et des problèmes similaires lors de l'installation de plusieurs packages en installant chaque package à partir de son propre sous-processus). Cependant, dans d'autres cas, tels que setup_requires
, il peut déjà y avoir une instance Distribution
du paquet racine dans distutils.core._setup_distribution
. Ainsi, lorsque la classe Configuration
Numpy essaie de joindre des éléments à l'objet Distribution
pour _Numpy lui-même_, elle peut finir par jouer avec le mauvais Distribution
dans certains cas. Cela se traduit par une construction Numpy mutilée car certains bits manquent.
Il existe un certain nombre de solutions de contournement possibles à cela, à la fois de la fin de setuptools et / ou de la fin de Numpy. Je n'ai pas décidé quelle serait la meilleure approche, mais le tout est définitivement en désordre :)
Pour ce que ça vaut, une solution de contournement possible à partir de la fin de setuptools serait pour setuptools.sandbox.run_setup
, la fonction que setuptools utilise pour réaliser setupception, pour enregistrer / restaurer toutes les variables globales distutils.core
avant / après l'exécution de l'installation script en question.
En l'occurrence, je pense que la version actuelle de setuptools peut déjà résoudre ce problème en masquant le distutils.core
(en le supprimant de sys.modules
) avant d'appeler le script setup.py enfant. Cela devrai prendre soin de ça. Mais je n'ai pas revérifié cela.
Mise à jour: confirmé, le problème que j'ai décrit ci-dessus est résolu (un peu par heureux accident) dans setuptools> = 10.0.
@embray c'est un beau travail de détective! (et ça me fait un peu mal à la tête :))
Vous avez raison, easy_install
- et donc get_distribution()
je suppose - est encore suffisamment pertinent pour que nous ne devrions pas le casser.
@rgommers Le fait est que cette solution de contournement pour easy_install a été ajoutée il y a très longtemps, et je ne pense plus qu'elle soit entièrement nécessaire (pas seulement pour le fait qu'easy_install lui-même est effectivement obsolète, même si je sais qu'il y a encore un une poignée de bonnes raisons pour lesquelles les gens doivent l'utiliser). Je vais voir si je peux proposer un correctif qui résout le problème d'origine sans être un problème dans d'autres contextes.
@embray sonne bien. Si vous préparez un correctif et qu'il n'est pas examiné dans les 2 semaines environ, veuillez me donner un coup de pied (doucement)
setup_requires = ["numpy"] n'a pas fonctionné pour moi. J'ai reçu ce message d'erreur:
AttributeError: l'objet 'module' n'a pas d'attribut 'get_include'.
Mais exécuter "python setup.py install" une deuxième fois a résolu le problème. Voir aussi http://stackoverflow.com/questions/21605927/why-doesnt-setup-requires-work-properly-for-numpy
Je viens de rencontrer le problème signalé par @asmaier.
Pour ce que ça vaut, je n'ai jamais oublié mes idées pour résoudre ce problème, mais j'ai juste dû me concentrer sur d'autres choses pour le moment. Si quelqu'un d'autre veut tenter sa chance, j'ai fait des recommandations de haut niveau pour savoir où il pourrait aller, quelques commentaires d'ici.
donc, ce problème est dû au fait que __builtins__.__NUMPY_SETUP__ = True
est défini
et lorsque vous installez une dépendance qui a besoin de numpy comme dépendance, le __NUMPY_SETUP__
n'est pas réinitialisé par setuptools.
il semble que vous essayez de définir __NUMPY_SETUP__ = False
ici
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
mais ce code n'est jamais atteint, car le retour sur la ligne précédente ...
en fait, je crois que toute la fonction isbootstrapping utilise mal / abuse __builtins__
ici, d'une manière qui se brise lorsque vous avez numpy comme dépendance, et que vous avez une dépendance qui a numpy comme dépendance.
@JensTimmerman Je soupçonne que cela est également lié à https://github.com/matplotlib/matplotlib/issues/6928 ,
Toutes les suggestions sur la manière appropriée de résoudre ce problème sont les bienvenues.
@rgommers Pensées?
il semble que vous essayez de définir NUMPY_SETUP = False ici
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
mais ce code n'est jamais atteint, car le retour sur la ligne précédente ...
Cette fonction is_bootstrapping
n'est utilisée nulle part, elle n'est donc pas pertinente.
en fait, je crois que toute la fonction isbootstrapping utilise mal / abuse des fonctions intégrées ici, d'une manière qui se brise lorsque vous avez numpy comme dépendance et que vous avez une dépendance qui a numpy comme dépendance.
L'utilisation de seulement __builtins__
est la principale setup.py
ici .
C'est moche, mais il est également difficile d'écrire cela de manière plus robuste. Je suppose pour le moment que s'il y a un problème avec cela, il n'apparaîtra que pour setup_requires='numpy'
dans certaines circonstances et pas avec install_requires
. La différence entre eux est que le premier invoque setuptools
car pip
ne sait pas encore comment le gérer. Dans Scipy, nous utilisons cependant setup_requires='numpy'
, et nous n'avons jamais eu de problème avec cela. Il se peut donc que cela s'ajoute à la funkiness des scripts de configuration de matplotlib.
En relisant https://github.com/numpy/numpy/issues/2434#issuecomment -77898051, cela semble bien décrire la cause du problème, je ne pense pas que cela ait quelque chose à voir avec __NUMPY_SETUP__
.
EDIT: ou peut-être que c'est le cas dans certains cas, mais il est difficile de gérer cela d'une autre manière. Normalement, il n'y a pas de problème ici car pip
parvient à construire / installer des éléments d'une manière bien isolée.
Il ne devrait pas être trop difficile de prouver que cette théorie est vraie ou fausse, en utilisant del builtins.__NUMPY_SETUP__
à la fin de setup.py
.
a donné un essai dans gh-7956
Juste au cas où l'essentiel de https://github.com/numpy/numpy/issues/2434#issuecomment -49156521 disparaîtrait à un moment donné, voici une copie de la façon de reproduire ce problème:
cd /tmp
cat > ./setup.py <<DELIM
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: "Chris Ward" <[email protected]>
from setuptools import setup
default_setup = dict(
name='numpy_install_test',
description='https://github.com/numpy/numpy/issues/2434',
provides=['numpy_install_test'],
install_requires=['pandas'],
requires=['pandas'],
license='GPLv3',
author='Chris Ward',
author_email='[email protected]',
)
setup(**default_setup)
DELIM
virtualenv --no-site-packages ~/virtenvs/nonumpy
source ~/virtenvs/nonumpy/bin/activate
python setup.py install
avoir du mal à installer des pandas dans python2.7.16 en utilisant pip install -R requirements.txt
https://files.pythonhosted.org/packages/b2/4c/b6f966ac91c5670ba4ef0b0b5613b5379e3c7abdfad4e7b89a87d73bae13/pandas-0.24.2.tar.gz (11,8 Mo)
Sortie complète de la commande python setup.py egg_info:
Traceback (dernier appel le plus récent):
Fichier "
Fichier "/tmp/pip-install-WznqHc/pandas/setup.py", ligne 746, dans
setuptools_kwargs)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", ligne 144, dans la configuration_install_setup_requires (attrs)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", ligne 139, dans _install_setup_requiresdist.fetch_build_eggs (dist.setup_requires)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", ligne 724, dans fetch_build_eggsreplace_conflicting = Vrai,Fichier "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", ligne 782, en cours de résolutionreplace_conflicting = remplacer_conflictingFichier "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", ligne 1065, dans best_matchretourne self.obtain (req, installateur)Fichier "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", ligne 1077, à obtenirretour installateur (exigence)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", ligne 791, dans fetch_build_eggretourne cmd.easy_install (req)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", ligne 679, dans easy_installretourne self.install_item (spec, dist.location, tmpdir, deps)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", ligne 705, dans install_itemdists = self.install_eggs (spec, téléchargement, tmpdir)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", ligne 890, dans install_eggsretourne self.build_and_install (setup_script, setup_base)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", ligne 1158, dans build_and_installself.run_setup (setup_script, setup_base, args)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", ligne 1144, dans run_setuprun_setup (setup_script, args)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", ligne 253, dans run_setupéleverFichier "/usr/local/lib/python2.7/contextlib.py", ligne 35, dans __exit__self.gen.throw (type, valeur, traceback)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", ligne 195, dans setup_contextrendementFichier "/usr/local/lib/python2.7/contextlib.py", ligne 35, dans __exit__self.gen.throw (type, valeur, traceback)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", ligne 166, dans save_modulessaved_exc.resume ()Fichier "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", ligne 141, en résumésix.reraise (type, exc, self._tb)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", ligne 154, dans save_modulesrendement économiséFichier "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", ligne 195, dans setup_contextrendementFichier "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", ligne 250, dans run_setup_execfile (setup_script, ns)Fichier "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", ligne 45, dans _execfileexec (code, globals, locaux)** Fichier "/tmp/easy_install-2M8B7z/numpy-1.17.0rc1/setup.py", ligne 31, dans
**RuntimeError: Python version >= 3.5 required.**
Je ne sais pas pourquoi il cherche numpy-1.17.0rc1 qui ne prend pas en charge python2
toute aide serait appréciée Merci
Veuillez partager votre requirements.txt
Le fichier d'exigences contient:
flacon == 1.0.2
flask-jwt == 0.3.2
flask-script == 2.0.6
flacon-scrypt == 0.1.3.6
PyJWT <1.5.0
clignotant == 1.4
numéros de téléphone == 8.9.12
flanker == 0.9.0
bugsnag == 3.4.3
pickledb == 0.7.2
demandes == 2.19.1
python-dateutil == 2.8.0
gunicorn == 19.9.0
gevent == 1.3.6
webargs == 4.0.0
pli == 3.10
bson == 0,5,7
céleri == 4.2.1
redis == 3.2.1
embauché
numpy == 1.16.4
Enfin, gérez-le pour qu'il fonctionne en conservant le fichier d'exigences numpy à l'intérieur et en installant plus tard des pandas
Exécutez la commande dans le docker:
RUN pip install https://github.com/pydata/pandas/releases/download/v0.24.2/pandas-0.24.2.tar.gz
Cependant, il y a maintenant un autre problème dans la compilation, c'est que vous devez installer cython pour compiler des pandas.
Erreur:
Exception: fichier généré par Cython 'pandas / io / sas / sas.c' introuvable.
Cython est requis pour compiler des pandas à partir d'une branche de développement.
Veuillez installer Cython ou télécharger un package de version de pandas.
Une idée?
Non connecté à ce problème qui concerne l'utilisation de install_requires
intérieur de setup.py
. Veuillez ouvrir un nouveau numéro. Avez-vous vraiment besoin d'installer des pandas à partir des sources? Pourquoi pas pip install pandas==0.24.2
?
Oui, je vais ouvrir ce numéro dans la bibliothèque pandas. Cependant, le post que j'ai mentionné plus tôt est lié à numPy puisque vous ne pouvez pas installer pandas directement numPy est correctement installé sur Python2.7 sous docker env.
Pourquoi ne pas pip installer pandas == 0.24.2? Parce que quand je le lance sous docker, il est dit.
Exception: fichier généré par Cython 'pandas / msgpack.c' introuvable.
Cython est requis pour compiler des pandas à partir d'une branche de développement.
Veuillez installer Cython ou télécharger un package de version de pandas.
Je dois donc utiliser la version finale de pandas à installer à partir de l'archive tar
Fermeture. Je pense que le monde python s'éloigne de setup_requires
et plus vers requirements.txt
ou pyproject.toml
. La solution de contournement est ci-dessous pour ceux qui souhaitent toujours utiliser setup_requires
.
setup(
...
setup_requires=["numpy"],
install_requires=["numpy"],
)
Quant à @omeryounus essayant d'installer numpy sur python2, c'est un problème distinct non lié à celui-ci. Certains utilisateurs ont signalé que la mise à niveau de pip et setuptools vers la version la plus récente avait aidé à résoudre ce problème.
Veuillez rouvrir s'il y a plus à discuter autour de setup_requires
.
Commentaire le plus utile
Pour info pour toute personne rencontrant ce problème, avec la dernière version de
setuptools
, une solution de contournement consiste à ajouter NumPy àsetup_requires
. Je l'ai toujours gardé dansinstall_requires
, donc monsetup.py
ressemble à:Cela fonctionne et n'installe NumPy qu'une seule fois, à la fois sur Mac OS X et Linux (non testé sous Windows).
Quant à savoir pourquoi je n'ai aucune idée.