ich programmiere schon einige Zeit in Python, komme aber an dieser Stelle nicht weiter.
Und zwar möchte ich ein Modul direkt aufrufen, es aber auch in anderen Projekten importieren.
Komischerweise funktioniert das in Python 2.7, aber in 3.2 nicht, sondern nur eine der beiden Varianten.
Um jetzt mal konkret zu werden hier ein einfaches Beispiel:
py_testpaket
|- test.py
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from paket import tools
from paket import modul
i = tools.random_int()
print("Zahl 1: " + str(i))
|- __init__.py (leer)
|- modul.py
|- tools.py
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
paket.modul
Test-Modul
"""
from . import tools
i = tools.random_int()
print("Zahl: " + str(i))
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
paket.tools
Test-Modul
"""
import random as r
def random_int():
i = r.randint(0, 100)
return i
Code: Alles auswählen
$ python3 test.py
Zahl: 68
Zahl 1: 73
Code: Alles auswählen
$ python3 modul.py
Traceback (most recent call last):
File "modul.py", line 10, in <module>
from . import tools
ValueError: Attempted relative import in non-package
Code: Alles auswählen
$ python3 modul.py
Zahl: 39
Code: Alles auswählen
$ python3 test.py
Traceback (most recent call last):
File "test.py", line 5, in <module>
from paket import modul
File ".../py_testpaket/paket/modul.py", line 10, in <module>
import tools
ImportError: No module named tools
Bei dem Modul, an dem ich arbeite, verwende ich Sphinx für die Dokumentation, wo die Funktionen mit Docstrings ausgelesen werden und Unittests mit nose, wo auch das Modul importiert werden muss. Diese sollen natürlich im selben Ordner liegen und nicht darüber. Außerdem hab ich eine demo.py, die verschiedene Funktionen zeigt und dafür auch aus dem gleichen Ordner das Modul importieren muss.
Ich schätze das ist ganz einfach zu lösen.
Wie mache ich es richtig?