2014-01-24 7 views
9

zu installieren Ich finde, dass viele Leute Probleme haben, Python-Pakete mit pip zu installieren, weil python-dev nicht installiert ist. Hauptsächlich, der Fehler:Sollte python-dev benötigt werden, um pip

fatal error: Python.h: No such file or directory 

Also die Frage: Sollte Python-Dev eine erforderliche Abhängigkeit von Pip sein? Oder ist dies nur ein Problem für bestimmte Pakete, die mit pip installiert werden, und wenn ja, sind bestimmte Schritte erforderlich, um sicherzustellen, dass Benutzer bei der Installation der Module nicht auf den Fehler stoßen?

+0

Dies ist ein Problem mit einigen angepassten (und nicht näher bezeichneten) Distro-Python-bezogenen Paketen, nicht mit Python oder der Programmierung. Also ich glaube, es gehört auf SuperUser, oder eine Distro-spezifische Seite wie AskUbuntu, oder vielleicht ein Fehlerbericht über den Bug-Tracker der Distribution. – abarnert

+0

@mata: Aber es gibt so etwas wie 'python-dev' nur, wenn deine Distribution Python aufteilt. Erstellen und installieren Sie Python selbst oder führen Sie ein beliebiges Installationsprogramm von python.org aus, und Sie haben 'Python.h'. Sein Problem ist auch nicht, dass er keinen Compiler hat - er bekommt offensichtlich einen Fehler von seinem Compiler. – abarnert

Antwort

13

Ich glaube nicht, dass dies tatsächlich auf Stackoverflow gehört, aber falls ich falsch liege ...

Erstens ist python-dev kein Python Sache, es ist ein Ubuntu oder Fedora oder eine andere Distro Sache. Wenn Sie Python herunterladen, erstellen und installieren oder ein binäres Installationsprogramm von python.org ausführen, wird Python.h an einem geeigneten Ort installiert. Viele Linux-Distributionen teilen gerne Pakete in Unterpakete auf und verschieben Dinge, die Sie nur zum Bauen in ein -dev oder ähnliches Paket brauchen, und es ist absolut nichts falsch daran, das mit Python zu tun, aber es ist immer noch etwas, was die Distribution macht.

Zweitens ist Python.h nicht zum Erstellen aller Pakete erforderlich, nur diejenigen, die C-Erweiterungsmodule enthalten. Da viele Pakete pure-Python sind und keine solchen Erweiterungsmodule haben, macht es Sinn, dass das pip Paket einer Distribution nicht das python-dev Paket benötigt. (In der gleichen Weise, dass das Paket pip einer Distribution wahrscheinlich keinen C-Compiler benötigt.)

Drittens geben die meisten Distributionen, die Ihnen ein python-pip oder ähnliches Paket geben, auch Pakete für beliebte Pakete. Wenn Sie sie auf diese Weise installieren, brauchen Sie entweder python-dev (und einen C-Compiler) nicht, weil sie binäre Pakete sind, oder Sie werden sie brauchen, aber sie werden als Abhängigkeiten (rpm, deb usw.) herangezogen. Alle haben eine Möglichkeit, separate "Build" - und "Run" -Abhängigkeiten anzugeben.

Aber wenn Sie hinter die Rückseite Ihres Paketmanagers gehen und versuchen, Pakete mit pip zu installieren (was eine vernünftige Sache zu tun ist), kann der Paketmanager Ihnen nicht sagen, welche Pakete welche Abhängigkeiten benötigen, während pip Ihnen nur sagen kann über Python-Paketabhängigkeiten, also gibt es nichts, was dies erzwingt.

+1

Vielen Dank, diese Antwort hat viel Einblick gegeben. Ich wusste nicht, Python-Dev war eine Distro bezogene Paket (oder ich hätte auf einem Ubuntu-Formular geschrieben!) Es macht auch Sinn, dass Python.h nur für C-Erweiterungen (daher die. H, oder?) benötigt wird Mein Hauptzweck, diese Frage zu stellen, ist, dass viele Leute, die neu in der Programmierung und Python sind, während sie es am besten gelesen haben, am besten Python-Pakete mit pip installieren, möglicherweise aufgeben und den Paketmanager verwenden. Für einen Anfänger scheint es gebrochen. Diese Wahrnehmung ist nicht die Schuld des Benutzers, aber vielleicht eine Gelegenheit, die Python/Distro-Interaktion zu verbessern! – hansonap

+0

@hansonap: Ich könnte dir meine Meinung sagen (bedenke, dass Python 3.4+ mit einem 'pip' Bootstrap und einem' venv' Tool, das 'pip' in jede virtuelle Umgebung installiert ...), aber wirklich, ich denke dir sollte dies auf die Ideen, Distutils/Verpackung SIG oder andere [Mailinglisten] (https://mail.python.org/mailman/listinfo) bringen.Die Kernentwickler, besonders Nick Coghlan, haben viel mehr darüber nachgedacht als ich und werden bessere Antworten haben - und wenn sie etwas nicht gedacht haben, je eher sie es hören, desto besser. – abarnert

+0

@hansonap: Aber hier ist meine Meinung: Es ist zu spät, um Python 2.x zu beheben. In 3.4+ verwenden Sie entweder 'venv' als Deployment-Tool (so dass Ihre Produktionsmaschinen nicht einmal' pip' ausführen müssen) oder ein hauseigenes Repo mit '' '' '' '' '' ''' '' '' '' '' muss etwas kompilieren). So oder so, keine Notwendigkeit für "python-dev" oder für "libxml2-dev" und dergleichen auf Ihren Produktionsmaschinen. Auf Dev-Maschinen und normalen Desktops gibt es keinen Grund, 'python-dev' nicht zu installieren, also mach es einfach. – abarnert