<p>numpy Installation durch install_requires Direktive Problem (Trac # 1841)</p>

Erstellt am 20. Okt. 2012  ·  39Kommentare  ·  Quelle: numpy/numpy

_Ursprüngliches Ticket http://projects.scipy.org/numpy/ticket/1841 am 25.05.2011 vom Trac-Benutzer ohe, zugewiesen an unknown._

Hallo,

In einer virtuellen Umgebung mit Python v2.7.1 kann ich numpy nicht über die Direktive install_requires von setuptools / Distribute installieren.

from setuptools import setup
setup(...
      install_requires=['numpy'],
      ...)

Ein python setup.py install gibt mir den folgenden Traceback:

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

Ich habe kein Problem damit, numpy mit pip install numpy oder easy_install numpy innerhalb oder außerhalb einer virtuellen Umgebung zu installieren.

Betriebssystem: Mac OS 10.6.7

00 - Bug Other

Hilfreichster Kommentar

Als FYI für alle, bei denen dieses Problem auftritt, besteht eine Problemumgehung darin, mit der neuesten Version von setuptools NumPy zu setup_requires hinzuzufügen. Ich habe es immer noch in install_requires behalten, also sieht mein setup.py aus:

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

Dies funktioniert und installiert NumPy nur einmal unter Mac OS X und Linux (nicht unter Windows getestet).

Warum habe ich keine Ahnung.

Alle 39 Kommentare

_ @ rgommers schrieb am 2011-05-27_

Ich bin mir nicht sicher, wo genau das Problem liegt, aber können Sie es umgehen, indem Sie einfach ein Installationsskript ausführen, das zuerst numpy und dann Ihr Paket installiert? Es ist keine gute Idee, sich auf diese schlecht dokumentierten Setuptools-Funktionen zu verlassen, wenn Sie dies vermeiden können.

Wenn ich raten müsste, würde ich sagen, dass das erste Aufrufen von setuptools.setup () eine Menge Magie hervorruft, die etwas für numpy.distutils vermasselt, daher:

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

Diese Warnung stammt von distutils / misc_util.py.

_trac user ijstokes schrieb am 2011-06-08_

Ich hatte gerade den gleichen Fehler und für mich scheint es, dass er durch einige Abhängigkeitsprobleme verursacht wird. Wenn ich easy_install mit den anderen Modulen erneut versuche, funktionieren sie beim zweiten Mal. Ich gehe davon aus, dass einige Abhängigkeiten erst nach dem Ende der easy_install-Sitzung "sichtbar" sind.

Ian

Ist es möglich, dies irgendwann zu beheben? Dies führt zu Problemumgehungen, bei denen keine IHMO vorhanden sein sollte. Ich möchte wirklich zu einem Punkt kommen, an dem numpy in der Option install_requires einer setup.py angegeben werden kann.

Es ist natürlich möglich, wenn jemand Zeit investiert, um das Problem wirklich zu verstehen, und eine saubere Lösung einreicht. Für mich persönlich ist es kein Prio - install_requires sollte imho vermieden werden (zumindest bis pip und easy_install die Aktualisierung von Abhängigkeiten beenden, wenn mindestens ein Paket aktualisiert wird).

Können Sie bestätigen, dass das gleiche Problem immer noch bei modernen Distutils / Setuptools / Pip auftritt?

Es tut.

Von meinem iPad gesendet

Am 29. November 2013, um 7:22 Uhr, schrieb njsmith [email protected] :

Können Sie bestätigen, dass das gleiche Problem immer noch mit modernen auftritt
distutils / setuptools / pip?

- -
Antworten Sie direkt auf diese E-Mail oder sehen Sie sie sich an
Gi tHubhttps: //github.com/numpy/numpy/issues/2434#issuecomment -29485806
.

Ich bin gerade auf dieses Problem gestoßen, kann also bestätigen, dass es da ist. Die Option install_requires sollte dem Schreiben eines benutzerdefinierten Installationsskripts vorgezogen werden, wenn es nicht wirklich benötigt wird.

Betriebssystem: Mac 10.8.3

Schlagen Sie dieses Problem zu. Keine Show hat aufgehört, aber definitiv nervig. Vor allem, weil es in keiner Weise offensichtlich ist, dass es sich eher um einen Fehler als um ein Benutzer- / Umgebungsproblem handelt.

Ich habe gerade versucht, dies zu reproduzieren, indem ich Pandas (die install_requires ) in einer virtuellen 2.7-Umgebung installiert habe, die wie folgt erstellt wurde:

$ virtualenv --no-site-packages nonumpy
$ source nonumpy/bin/activate
$ cd $PANDAS_DIR
$ pip install cython # needed for pandas
$ python setup.py install

Wenn jemand eine einfache Möglichkeit geben kann, dies zu reproduzieren, würde dies helfen.

Ich habe dieses Problem auch in einer virtuellen 2.7-Umgebung. os ubuntu keuchend

@zethraeus Könnten Sie eine Reihe von Befehlen bereitstellen, um dies zu reproduzieren (wie in meinem Kommentar oben)? Es ist schwer zu beheben, wenn wir das Problem nicht reproduzieren können.

Hallo! Entschuldigung, es hat so lange gedauert, aber hier ist ein Reproduzent.

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

Danke für das Beispiel @ kejbaly2 , ich kann es jetzt reproduzieren.

Ein sehr ähnliches Problem beim Versuch, install_requires und numpy zu verwenden

So kann ich den Fehler auf Red Hat 6.5 reproduzieren
https://gist.github.com/necrolyte2/530e9b39dcb0259b69d4

Als FYI für alle, bei denen dieses Problem auftritt, besteht eine Problemumgehung darin, mit der neuesten Version von setuptools NumPy zu setup_requires hinzuzufügen. Ich habe es immer noch in install_requires behalten, also sieht mein setup.py aus:

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

Dies funktioniert und installiert NumPy nur einmal unter Mac OS X und Linux (nicht unter Windows getestet).

Warum habe ich keine Ahnung.

Ich habe versucht, ein ähnliches Problem aufzuspüren, das manchmal auftreten kann, wenn Numpys Build in Astropy über setup_requires=['Numpy'] ausgeführt wird, wenn Astropy selbst als setup_requires eines anderen Pakets installiert wird (Ich nenne das 'Setupception').

Ich habe es auf dieses alte (aber im Prinzip immer noch relevante, zumindest geringfügige?) Stück Code zurückgeführt: https://github.com/numpy/numpy/blob/9fc077332b34a7b2a90126f5ae6cc50d57162db5/numpy/distutils/core.py#L92

In den meisten Fällen wird beim Ausführen von Numpys setup.py eine Funktion namens configuration für numpy.distutils.core.setup in die kwargs verschoben. numpy.distutils.core.setup wiederum löscht die Taste 'configuration' von den Setup-Warnungen, richtet dann einige "magische" globale Variablen in distutils.core und ruft dann rekursiv _itself_ auf . Der Zweck dieses rekursiven Aufrufs besteht darin, die distutils-Maschinerie zu verwenden, um die Befehlszeilenargumente auf Fehler / - Hilfe zu überprüfen.

Anschließend wird die Funktion configuration aufgerufen, mit der die Konfiguration aller Numpy-Unterpakete gestartet wird, bevor erneut die Funktion setup() distutils aufgerufen wird, wobei alle Pakete jetzt vollständig konfiguriert sind.

Dies alles läuft schief, weil der Configuration Manager gelegentlich das Dienstprogramm get_distribution aufrufen muss, um Dinge an das Objekt Distribution anzuhängen. Die Notwendigkeit hierfür ist umstritten. In der Tat, während es einige Teile des Codes in Configuration , die es denken soll diese in der Lage sein zu tun, gibt es andere Teile , die denken , dass , wenn es bereits eine ist Distribution Instanz angebracht distutils.core._setup_distribution dann stimmt wahrscheinlich etwas nicht (daher ist die Warnung "Distutils-Verteilung wurde initialisiert, es kann zu spät sein, ein Unterpaket hinzuzufügen", die einige Leute in diesem Thread gemeldet haben).

Um ein wenig zu sichern und hoffentlich zu verdeutlichen: Wenn Sie die setup() -Funktion von distutils (oder setuptools) ausführen, wird ein Distribution -Objekt aus den setup() kwargs initialisiert und anschließend das zugewiesen Das Ergebnis ist Distribution für die globale Variable distutils.core._setup_distribution . Zu keinem Zeitpunkt wird diese Variable tatsächlich bereinigt, da davon ausgegangen wird, dass es sich um das einzige Setup handelt, das im aktuellen Python-Interpreter ausgeführt wird. Es wurde nicht für die Setup-Konzeption entwickelt. (pip umgeht dieses und ähnliche Probleme bei der Installation mehrerer Pakete, indem jedes Paket aus einem eigenen Unterprozess installiert wird.) In anderen Fällen, z. B. bei setup_requires , kann es jedoch bereits eine Distribution Instanz aus dem Root-Paket geben, die in distutils.core._setup_distribution . Wenn also Numpys Configuration -Klasse versucht, etwas an das Distribution -Objekt für _Numpy selbst_ anzuhängen, kann es in einigen Fällen dazu führen, dass mit den falschen Distribution herumgespielt wird. Dies führt zu einem verstümmelten Numpy-Build, da einige Bits fehlen.

Es gibt eine Reihe möglicher Problemumgehungen, sowohl vom Setuptool-Ende als auch vom Numpy-Ende. Ich habe nicht entschieden, was der beste Ansatz wäre, aber das Ganze ist definitiv ein Chaos :)

Eine mögliche Problemumgehung am Ende von setuptools wäre setuptools.sandbox.run_setup , die Funktion, mit der setuptools die Setup-Wahrnehmung erreicht, um alle globalen Variablen distutils.core vor / nach dem Ausführen des Setups zu speichern / wiederherzustellen Skript in Frage.

Ich glaube, dass die aktuelle Version von setuptools dies möglicherweise bereits behebt, indem sie das ursprüngliche distutils.core versteckt (aus sys.modules ), bevor das untergeordnete Skript setup.py aufgerufen wird. Das sollte sich darum kümmern. Aber ich habe das nicht noch einmal überprüft.

Update: Bestätigt, das oben beschriebene Problem wurde (etwas zufällig) in setuptools> = 10.0 umgangen.

@embray das ist ein schönes Stück Detektivarbeit! (und es tut meinem Kopf ein wenig weh :))

Sie haben Recht, dass easy_install - und damit get_distribution() nehme ich an - immer noch relevant genug ist, dass wir es nicht brechen sollten.

@rgommers Die Sache ist, dass die Problemumgehung für easy_install vor sehr langer Zeit hinzugefügt wurde und ich glaube nicht, dass sie mehr unbedingt notwendig ist (nicht nur, weil easy_install selbst effektiv veraltet ist, obwohl ich weiß, dass es noch eine gibt eine Handvoll guter Gründe, warum die Leute es benutzen müssen). Ich werde sehen, ob ich einen Patch entwickeln kann, der das ursprüngliche Problem behebt, ohne in anderen Kontexten ein Problem zu sein.

@embray klingt gut. Wenn Sie einen Patch fertig haben und dieser nicht innerhalb von ~ 2 Wochen überprüft wird, treten Sie mich bitte (sanft)

setup_requires = ["numpy"] hat bei mir nicht funktioniert. Ich habe diese Fehlermeldung erhalten:

AttributeError: Das Objekt 'module' hat kein Attribut 'get_include'.

Das zweite Mal wurde "python setup.py install" ausgeführt, um das Problem zu beheben. Siehe auch http://stackoverflow.com/questions/21605927/why-doesnt-setup-requires-work-properly-for-numpy

Ich bin gerade auf das von @asmaier gemeldete Problem gestoßen.

Für das, was es wert ist, habe ich meine Ideen zur Behebung dieses Problems nie vergessen, sondern musste mich jetzt nur auf andere Dinge konzentrieren. Wenn jemand anderes es versuchen möchte, habe ich einige hochrangige Empfehlungen abgegeben, wo er suchen könnte, ein paar Kommentare von hier oben.

Dieses Problem ist auf die Tatsache zurückzuführen, dass __builtins__.__NUMPY_SETUP__ = True festgelegt wird
und wenn Sie eine Abhängigkeit installieren, die numpy als Abhängigkeit benötigt, wird __NUMPY_SETUP__ von setuptools nicht zurückgesetzt.
Es sieht so aus, als würden Sie versuchen, hier __NUMPY_SETUP__ = False festzulegen
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
aber dieser Code wird nie erreicht, weil die Rückkehr in die vorherige Zeile ...

Eigentlich glaube ich, dass die gesamte isbootstrapping-Funktion hier __builtins__ missbraucht / missbraucht, auf eine Weise, die bricht, wenn Sie numpy als Abhängigkeit haben und eine Abhängigkeit, die numpy als Abhängigkeit hat.

@JensTimmerman Ich vermute, dass dies auch mit https://github.com/matplotlib/matplotlib/issues/6928 zusammenhängt .

Vorschläge zur ordnungsgemäßen Behebung dieses Problems sind willkommen.

@rgommers Gedanken?

anscheinend versuchen Sie hier
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
aber dieser Code wird nie erreicht, weil die Rückkehr in die vorherige Zeile ...

Diese is_bootstrapping -Funktion wird nirgendwo verwendet, wo sie aussieht, ist also irrelevant.

tatsächlich, ich glaube , die ganze isbootstrapping Funktion mißbraucht / missbrauchen builtins hier, in einer Weise , dass Pausen , wenn Sie numpy als Abhängigkeit haben, und eine Abhängigkeit haben , die numpy als Abhängigkeit hat.

Die einzige Verwendung von __builtins__ ist in dem Haupt setup.py hier .

Es ist hässlich, aber es ist auch schwer, das robuster zu schreiben. Ich vermute im Moment, dass wenn es ein Problem damit gibt, es nur unter bestimmten Umständen für setup_requires='numpy' und nicht für install_requires . Der Unterschied zwischen ihnen besteht darin, dass der erstere setuptools aufruft, weil pip noch nicht weiß, wie er damit umgehen soll. In Scipy verwenden wir jedoch setup_requires='numpy' und hatten noch nie ein Problem damit. So kann es sein, dass plus die Funky in Matplotlibs Setup-Skripten.

Wenn Sie noch einmal https://github.com/numpy/numpy/issues/2434#issuecomment -77898051 lesen, scheint dies die Ursache des Problems gut zu beschreiben. Ich glaube, es hat nichts mit __NUMPY_SETUP__ zu tun

EDIT: oder vielleicht in einigen Fällen, aber es ist schwierig, damit anders umzugehen. Normalerweise gibt es hier kein Problem, da pip schafft, Dinge auf eine Weise zu erstellen / installieren, die gut isoliert ist.

Sollte nicht zu schwer sein, diese Theorie richtig oder falsch zu beweisen, indem Sie del builtins.__NUMPY_SETUP__ am Ende von setup.py .

habe das in gh-7956 ausprobiert

Nur für den Fall, dass das Wesentliche in https://github.com/numpy/numpy/issues/2434#issuecomment -49156521 irgendwann verschwindet, finden Sie hier eine Kopie der Reproduktion dieses Problems:

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

Schwierigkeiten bei der Installation von Pandas in Python2.7.16 mit pip install -R require.txt

https://files.pythonhosted.org/packages/b2/4c/b6f966ac91c5670ba4ef0b0b5613b5379e3c7abdfad4e7b89a87d73bae13/pandas-0.24.2.tar.gz (11,8 MB)
Vollständige Ausgabe des Befehls python setup.pygg_info:
Traceback (letzter Anruf zuletzt):
Datei "", Zeile 1, in
Datei "/tmp/pip-install-WznqHc/pandas/setup.py", Zeile 746, in
setuptools_kwargs)Datei "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", Zeile 144, im Setup_install_setup_requires (attrs)Datei "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", Zeile 139, in _install_setup_requiresdist.fetch_build_eggs (dist.setup_requires)Datei "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", Zeile 724, in fetch_build_eggsreplace_conflicting = True,Datei "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", Zeile 782, in Auflösungreplace_conflicting = replace_conflictingDatei "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", Zeile 1065, in best_matchreturn self.obtain (req, installer)Datei "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", Zeile 1077, in erhaltenInstallateur zurückgeben (Voraussetzung)Datei "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", Zeile 791, in fetch_build_eggRückgabe cmd.easy_install (req)Datei "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", Zeile 679, in easy_installreturn self.install_item (spec, dist.location, tmpdir, deps)Datei "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", Zeile 705, in install_itemdists = self.install_eggs (spec, download, tmpdir)Datei "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", Zeile 890, in install_eggsreturn self.build_and_install (setup_script, setup_base)Datei "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", Zeile 1158, in build_and_installself.run_setup (setup_script, setup_base, args)Datei "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", Zeile 1144, in run_setuprun_setup (setup_script, args)Datei "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", Zeile 253, in run_setuperziehenDatei "/usr/local/lib/python2.7/contextlib.py", Zeile 35, in __exit__self.gen.throw (Typ, Wert, Rückverfolgung)Datei "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", Zeile 195, in setup_contextAusbeuteDatei "/usr/local/lib/python2.7/contextlib.py", Zeile 35, in __exit__self.gen.throw (Typ, Wert, Rückverfolgung)Datei "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", Zeile 166, in save_modulessaved_exc.resume ()Datei "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", Zeile 141, im Lebenslaufsix.reraise (type, exc, self._tb)Datei "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", Zeile 154, in save_modulesErtrag gespartDatei "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", Zeile 195, in setup_contextAusbeuteDatei "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", Zeile 250, in run_setup_execfile (setup_script, ns)Datei "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", Zeile 45, in _execfileexec (Code, Globals, Einheimische)** Datei "/tmp/easy_install-2M8B7z/numpy-1.17.0rc1/setup.py", Zeile 31, in

**RuntimeError: Python version >= 3.5 required.**

Ich bin mir nicht sicher, warum ich nach numpy-1.17.0rc1 suche, das Python2 nicht unterstützt

Jede Hilfe wäre dankbar, danke

Bitte teilen Sie Ihre requirements.txt

Anforderungsdatei enthält:

Kolben == 1.0.2
flask-jwt == 0.3.2
flask-script == 2.0.6
flask-scrypt == 0.1.3.6
PyJWT <1.5.0
Blinker == 1.4
Telefonnummern == 8.9.12
Flanker == 0.9.0
bugsnag == 3.4.3
pickledb == 0.7.2
Anfragen == 2.19.1
python-dateutil == 2.8.0
gunicorn == 19.9.0
gevent == 1.3.6
webargs == 4.0.0
Lage == 3.10
bson == 0.5.7
Sellerie == 4.2.1
redis == 3.2.1
Hiredis
numpy == 1.16.4

Schaffen Sie es schließlich, damit die Nummer in der Anforderungsdatei bleibt und später Pandas installiert werden

Führen Sie den Befehl im Docker aus:

RUN pip install https://github.com/pydata/pandas/releases/download/v0.24.2/pandas-0.24.2.tar.gz

Jetzt gibt es jedoch ein weiteres Problem beim Kompilieren: Sie müssen cython installieren, um Pandas zu kompilieren.

Error:

Ausnahme: Die von Cython generierte Datei 'pandas / io / sas / sas.c' wurde nicht gefunden.
Cython muss Pandas aus einem Entwicklungszweig zusammenstellen.
Bitte installieren Sie Cython oder laden Sie ein Release-Paket mit Pandas herunter.

Irgendeine Idee?

Nicht mit diesem Problem verbunden, das die Verwendung von install_requires innerhalb von setup.py betrifft. Bitte öffnen Sie eine neue Ausgabe. Müssen Sie Pandas wirklich von der Quelle installieren? Warum nicht pip install pandas==0.24.2 ?

Ja, ich werde dieses Problem in der Pandas-Bibliothek öffnen. Der Beitrag, den ich zuvor erwähnt habe und der sich auf numPy bezieht, da Sie Pandas nicht direkt installieren können, numPy ist jedoch ordnungsgemäß auf Python2.7 unter Docker env installiert.
Warum nicht pandas pand installieren == 0.24.2? Denn wenn ich es unter Docker laufen lasse, heißt es.

Ausnahme: Die von Cython generierte Datei 'pandas / msgpack.c' wurde nicht gefunden.
Cython muss Pandas aus einem Entwicklungszweig zusammenstellen.
Bitte installieren Sie Cython oder laden Sie ein Release-Paket mit Pandas herunter.

Ich muss also die Release-Version von Pandas verwenden, um von Tarball installiert zu werden

Schließen. Ich denke, die Python-Welt bewegt sich weg von setup_requires und mehr hin zu requirements.txt oder pyproject.toml . Die Problemumgehung ist unten für diejenigen aufgeführt, die noch setup_requires möchten.

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

Was @omeryounus betrifft, der versucht, numpy auf python2 zu installieren, ist dies ein separates Problem, das nicht mit diesem verbunden ist. Einige Benutzer haben berichtet, dass das Upgrade von pip und setuptools auf die neueste Version bei diesem Problem geholfen hat.

Bitte öffnen Sie erneut, wenn mehr zu besprechen ist, um setup_requires .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen