2010-09-15 8 views
10

Ich habe eine Bibliothek in Python geschrieben und möchte, dass sie sich an einem gemeinsamen Speicherort im Dateisystem befindet.Ordner permanent zu Pythons Pfad hinzufügen

Von meinem Skript, möchte ich nur:

>>> import mylib 

Jetzt, um dies zu tun, ich verstehe diese Ich kann tun:

>>> import sys 
>>> sys.path.append(r'C:\MyFolder\MySubFolder') 
>>> import mylib 

Aber ich nicht Ich will das jedes Mal machen.

Die Frage ist: Wie füge ich einen Ordner zu Python sys.path dauerhaft hinzu? Ich würde mir vorstellen, dass es eine Umgebungsvariable wäre, aber ich kann sie nicht finden.

Es scheint als sollte es einfach sein, aber ich kann nicht herausfinden, wie es geht.

Antwort

10

Die PYTHONPATH-Umgebungsvariable wird es tun.

+0

Perfekt. Das habe ich gesucht. – riwalk

+0

Funktioniert es für Linux? Ich füge "PYTHONPATH = ~/pythons/ " zu meinem .zshrc hinzu (echo $ PYTHONPATH gebe es auch zurück). Dann drucke ich sys.path und es ist nicht da. :/ – xliiv

+1

Ok, es funktioniert in Linux. Ich habe den Befehl 'export' nicht in meine .zshrc eingefügt. Es ist merkwürdig, weil ich den $ PATH ändere und es keine Notwendigkeit gibt, es zu exportieren. Irgendeine Idee? – xliiv

3

Eine andere Möglichkeit ist es, die sys.path in Ihrem sitecustomize.py, ein Skript zu ändern, die als Python Startzeit geladen wird . (Es kann überall auf Ihrem vorhandenen Pfad gesetzt werden, und kann alle Setup-Aufgaben, die Sie möchten, verwenden, ich Tab-Vervollständigung mit readline auch einrichten.)

Das Modul site bietet eine Methode, die kümmert sich um Hinzufügen zu sys.path ohne Duplikate und mit .pth Dateien:

import site 
site.addsitedir(r'C:\MyFolder\MySubFolder') 
+0

Wenn das Hinzufügen einer Datei zum aktuellen Pfad eine Option wäre, warum würde ich überhaupt versuchen, den Pfad überhaupt zu ändern? Und noch schlimmer, was könnte mich dazu bringen, diese Zeile zu jedem einzelnen Python-Skript hinzuzufügen, das ich schreibe? Entschuldige, Bud ... nicht sehr elegant. – riwalk

+0

@ Stargazer712: Er ... 'sitecustomize.py' wird automatisch von Python ausgeführt. Sie müssen zu keinem Python-Skript eine Zeile hinzufügen. Das ist der springende Punkt. – bobince

+0

Vielleicht ist es eine unausgesprochene Anforderung, dass diese Bibliothek mit einem typischen Installer installiert wurde, und das Ändern einer Umgebungsvariablen ist viel einfacher (und transaktionsähnlicher) als das Bearbeiten einer Datei. – riwalk

1

weiß ich nicht, wie allgemein es ist, aber ich habe eine „usercustomize“ Datei liegt, um die gelesen wird, wenn mein Shell starten. Vielleicht ist es nur, weil ich ein Neuling bin, für den "Umgebungsvariable" gruselig klingt ... Wie auch immer, so ändere ich permanent meine sys.path

Aber wie gesagt, ich weiß nicht, wie allgemein es ist. Ich habe Python 2.7.3, installiert mit Python (x, y) auf Windows 7. Und diese Datei ist bei

C:> Benutzer> Me> Appdata> Roaming> Python> Python27> sitepackages> (Vorsicht, Appdata versteckter Ordner)

und die Datei, wie gesagt, ist „usercustomize.py "Nichts Besonderes in dieser Datei. In meinem Fall nur meine 3 importiert Pfade:

import sys 
sys.path.append('C:\\Users\\blablabla\\LPlot') 
sys.path.append('C:\\Users\\bliblibli\\MTSim') 
sys.path.append('C:\\Users\\blobloblo\\XP') 

hoffen, dass es auch hilft ... Und wenn nicht, schlägt mich nicht, ich bin 100% newb. Oder sagen wir 99,99%

+0

hmmm es ist eigentlich nicht einfach "lesen" wenn ich meine Konsole starte, da sys eigentlich noch nicht importiert wird als ich es starte ... Wie auch immer, meine 3 Ordner sind permanent in meinem sys.path ... also irgendwie funktioniert es ... –

+0

Willkommen bei StackOverflow! Ihr Wunsch zu helfen ist lobenswert, aber Sie sollten keine Antworten auf eine Frage veröffentlichen, wenn Sie nicht sicher sind, ob sie richtig sind. Wenn Sie Ihre Antwort mit "Ich weiß nicht, wie allgemein es ist" beantworten müssen, ist dies ein Zeichen dafür, dass Sie noch nicht genug Erfahrung haben, um diese Frage zu beantworten. Und außerdem wurde diese Frage vor fast drei Jahren gestellt (und beantwortet); eine weitere Antwort hinzuzufügen, dürfte dem ursprünglichen Fragesteller, der sich längst anderen Themen zugewandt hat, nicht helfen. :-) – rmunn

+0

Sorry ... Aber eigentlich hatte ich nach einer Antwort gesucht, genau wie die, die ich für einen Tag gemacht habe; weil ich wusste, dass diese Datei irgendwo existieren musste, bis ich sie wiederfinde (ich habe sie schon in der Vergangenheit benutzt, konnte sie nicht mehr finden). Also dachte ich, dass es vielleicht für jemand anderen nützlich wäre. Und ich wollte kein neues Thema dafür eröffnen, als dieses so ähnlich war ... –