2010-11-20 6 views
1

Dies kann mein eigenes Missverständnis sein, wie Python importiert und Suchpfade funktionieren, oder es kann ein Problem beim Packen des caldav-Pakets sein.Python-Skript-Import schlägt fehl, wenn Skript in Unterverzeichnis verschoben wird

Ich habe eine virtualenv Umgebung mit dem Namen myproject

In der obersten Ebene des myproject einrichten, habe ich ein Skript test.py, die zwei Importe enthalten:

import lxml 
import caldav 

In diesem Verzeichnis I-Typen:

python test.py 

und es funktioniert gut ohne Probleme

Jetzt Ich bewege das Skript in das Unterverzeichnis Test und führen Sie den Befehl:

python test/test.py 

Der Import lxml scheint immer noch zu arbeiten. Der Import caldav schlägt mit der folgenden Ausnahme fehl:

Traceback (most recent call last): 
    File "test/test.py", line 34, in <module> 
    main() 
    File "test/test.py", line 29, in main 
    exec ("import " + modulename) 
    File "<string>", line 1, in <module> 
    File "/home/ec2-user/caldav2sql/myproject/test/caldav/__init__.py", line 3, in <module> 
    from davclient import DAVClient 
    File "/home/ec2-user/caldav2sql/myproject/test/caldav/davclient.py", line 8, in <module> 
    from caldav.lib import error 
ImportError: No module named lib 

Mache ich hier etwas falsch? Sollte ich eine Art Pfad aufstellen?

Antwort

3

Am wahrscheinlichsten war caldav im selben Verzeichnis wie test.py, also wenn Sie import es funktioniert es gut. Jetzt, da Sie test.py in ein Unterverzeichnis verschoben haben, können Ihre Importe es nicht finden. Sie können entweder caldav verschieben oder PYTHONPATH einstellen. http://docs.python.org/tutorial/modules.html

Die Variable sys.path ist eine Liste von Strings, die den Suchpfad für Module des Interpreters bestimmt:

könnten Sie auch Ihre sys.path

Informationen vom Python-Modul Tutorial ändern. Es wird auf einen Standardpfad initialisiert, der von der Umgebungsvariablen PYTHONPATH oder von einem integrierten Standard übernommen wird, wenn PYTHONPATH nicht festgelegt ist. Sie können es Standardlistenoperationen unter Verwendung ändern:

>>> import sys 
>>> sys.path.append('/ufs/guido/lib/python') 
+0

Da dies eine virtualenv Umgebung ist, existiert caldav in myproject/lib/site-packages/caldav. Ich habe versucht, PYTHONPATH an diesen Ort zu setzen, aber es hilft nicht. –

+0

Ich habe gerade festgestellt, dass es eine falsche Installation von caldav unter dem Unterverzeichnis test gab, was alles in Unordnung brachte. Ich habe Birrreees Antwort akzeptiert, da sie mir geholfen hat, die Ursache des Problems zu finden. Vielen Dank! –

Verwandte Themen