<p>numpy installation via le problème de la directive install_requires (Trac # 1841)</p>

Créé le 20 oct. 2012  ·  39Commentaires  ·  Source: numpy/numpy

_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

00 - Bug Other

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é 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.

Tous les 39 commentaires

_ @ 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.

Voir: https://gist.github.com/kejbaly2/71517b08536776399198

Merci pour l'exemple @ kejbaly2 , je peux le reproduire maintenant.

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 "", ligne 1, dans
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 .

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

navytux picture navytux  ·  4Commentaires

MorBilly picture MorBilly  ·  4Commentaires

inducer picture inducer  ·  3Commentaires

Kreol64 picture Kreol64  ·  3Commentaires

dmvianna picture dmvianna  ·  4Commentaires