2016-03-22 3 views
0

Ich habe diese Verzeichnisstruktur:python3 für Tests von Paket auf Linux Import

MyPackage/ 
----/ __init__.py 

----/ tests/__init__.py 
----/ tests/test_file.py 

----/ src/ 
----/ src/__init__.py 
----/ src/file.py 

in test_file.py ich versucht habe:

from ..src.file import MyClass 
from MyPackage.src.file import MyClass 

Ich versuche test_file.py zu laufen dies innerhalb des Tests Ordner, wie zB:

python3 test_file.py 

Aber jede Art, wie ich es versuchen, funktioniert es nicht:

"Kein Modul MyPackage den Namen" (für "MyPackage.src.file")

"Parent-Modul '' nicht geladen, führt relativ Import kann nicht" (wenn ich "..src.file" verwenden)

Kann mir bitte jemand sagen Was ist das Problem und was kann ich tun?

Danke!

Antwort

1

Sie können manuell das Modul basedir zum PYTHONPATH mit sys.path.append hinzufügen()

import os 
import sys 

SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) 
PACKAGE_DIR = SCRIPT_DIR + '/..' 
sys.path.append(PACKAGE_DIR) 

from src.file import MyClass 

EDIT: Wenn Sie immer ausführen aus dem Paket basedir ..

$ cd MyPackage 
$ python tests/test_file.py 

.. das Paket basedir in Ihrem PYTHONPATH und Import aufgenommen werden sollten sollte

from src.file import MyClass 

wie dies funktioniert Ich hatte Probleme auf einigen Systemen, wo das aktuelle Verzeichnis nicht automatisch zu PYTHONPATH hinzugefügt wurde. Explizit gesetzt PYTHONPATH half

$ PYTHONPATH=. python tests/test_file.py 
+0

Danke! Es funktionierte! Ich habe auch gerade herausgefunden, dass ich PYTHONPATH im Terminal exportieren kann, und dann kann ich python3 test_ .py ausführen. Dies ist nützlich, da ich tatsächlich eine Menge Testdateien habe. – Feoggou

Verwandte Themen