_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
_ @ 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.
Gleiches Problem bei 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
Und im Red Hat Bug Tracker: https://bugzilla.redhat.com/show_bug.cgi?id=1019924
Es gibt noch weitere Dinge, die pip
richtig macht, aber setuptools
nicht install_requires
: https://bitbucket.org/pypa/setuptools/issue/209/setup_requires-and-install_requires- nicht
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 "
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
.
Hilfreichster Kommentar
Als FYI für alle, bei denen dieses Problem auftritt, besteht eine Problemumgehung darin, mit der neuesten Version von
setuptools
NumPy zusetup_requires
hinzuzufügen. Ich habe es immer noch ininstall_requires
behalten, also sieht meinsetup.py
aus:Dies funktioniert und installiert NumPy nur einmal unter Mac OS X und Linux (nicht unter Windows getestet).
Warum habe ich keine Ahnung.