2012-08-31 15 views
8

Ich habe EPD 7.3.1 installiert (heute als Enthought Canopy), die mit scikit-learn v 0.11 kommt. Ich benutze Ubuntu 12.04. Ich muss v 0.12 von scikit-learn installieren.Upgrade-Version von scikit-learn in Enthought Canopy Verteilung enthalten

Die Scikit-Learn doc says Klon das Repository, fügen Sie das Scikit-Learn-Verzeichnis zu Ihrem PYTHONPATH und die Erweiterung an Ort und Stelle bauen: python setup.py build_ext --inplace

Das Problem ist, dass EPD seine eigene geschlossene Welt scikit dirs (mit mulitple ist):
./lib/python2.7/site-packages/scikits/
./lib/python2.7/site-packages/sklearn

Und dann gibt es:
./EGG-INFO/scikit_learn/

Ich möchte wirklich nicht experimentieren, da es sehr lange gedauert hat, bis es soweit ist. Sollte ich in diesem Fall den Anweisungen von scikit-learn folgen?

Antwort

12

Die auf der scikit-learn-Website beschriebenen Aktionen funktionieren unabhängig von der scikit-learn-Version in EPD. Python wird automatisch die scikit-learn-Version verwenden, die in PYTHONPATHenvironment variable eingestellt ist, die Sie auf den Verzeichnispfad der Git-Version von scikit-learn setzen sollten.

Wenn Sie Bash auf einem Unix-ähnlichen System verwenden, sollten Sie Folgendes tun:

  • die Aktionen install scikit-learn's latest code Führen Sie (in diesem Beispiel ich es /home/yourname/bin/scikit-learn geklont)
  • bearbeiten .bashrc und fügen Sie die Leitung: export PYTHONPATH="/home/yourname/bin/scikit-learn";
  • Öffnen Sie ein neues Terminal und Python im interaktiven Modus starten, indem python
    • Typ eingeben: 012.
    • Typ: sklearn.__verion__ dies jetzt '0.12-git' statt 0.11

Warum funktionierts zeigen sollte? Python verwendet die Variable sys.path (eine list von Pfaden) intern, um alle Verzeichnisse zu verfolgen, in denen es nach Modulen und Paketen suchen sollte. Sobald ein Modul oder ein Paket angefordert wird, durchläuft Python diese Liste der Reihe nach, bis es eine Übereinstimmung gefunden hat. So kann z. B. ein Modul in sys.path mehrfach aufgeführt werden, aber nur die Version, die zuerst in der Liste erschien, wird verwendet.

Jede Python-Installation hat ihre eigenen Standardpfade, die in sys.path aufgeführt sind. Eine Möglichkeit zum Erweitern von sys.path besteht darin, Pfade in PYTHONPATH aufzulisten. Sobald Python startet, liest es diese Umgebungsvariable und fügt sie zum Anfang der sys.path Liste hinzu. Wenn Sie also den Pfad zu einer anderen Version von scikit-learn zu Ihrem PYTHONPATH hinzufügen, dann wird (EPDs) Python diese Version von scikit-learn zuerst finden und sie anstelle der weiter unten in sys.path aufgelisteten Version verwenden.

Um sys.path anzuzeigen, einfach import sys und dann print sys.path. Wenn Sie beispielsweise nur die 0.12-Version von scikit-learn in einem Python-Programm verwenden und die 0 verwenden möchten.11 Version als Standard in allen anderen Python-Programmen dann könnten Sie die PYTHONPATH leer lassen und nur den Pfad einfügen, um Scikit-Learn 0,12 manuell an der Spitze des Codes:

import sys 
sys.path.insert(0, '/home/yourname/bin/scikit-learn') 
import sklearn 
+1

auf Stack-Überlauf die Gemeinschaft gibt downvotes schlechte Fragen und upvotes zu guten Fragen. Ich würde die Frage für jetzt lassen, aber wenn Leute anfangen, es zu senken, dann haben Sie einen guten Hinweis, dass Sie es möglicherweise löschen möchten. – Sicco

+0

Ich habe das gleiche Problem, aber ich habe einen Mac. Ich habe es geschafft, Scikit nur über Macports zu installieren (nicht mit scikits setup.py, endet immer in der Mitte des Weges). Allerdings kann ich den bashrc nicht finden. Alles, was ich tun möchte, ist, Scikit in EPD (akademisch) auf .13 zu aktualisieren, und es erweist sich als sehr schwierig, jede Hilfe würde sehr geschätzt werden! – Shinjitsu

+0

@Shinjitsu Probieren Sie statt. Bashrc. Profile. Lass mich wissen ob es funktioniert. – Sicco