python

Python import local.module

Beim schreiben von Unit-Tests für Python-Module hatte ich bisher immer das Problem, daß das zu testende Modul zum Zeitpunkt, wo das Module gebaut ist, natürlich noch nicht in dieser Version installiert ist; im ungünstigen Fall ist gar eine alte Version der Python-Module installiert, gegen die die Tests dann laufen. Dummerweise liegen viele Pakete innerhalb des univention-Pakets, so daß es dann auch gerne Probleme damit gibt, daß entweder das eigene Paket univention.foo oder solche globalen Pakete wie univention.config_registry nicht gefunden werden.

Die Lösung ist in der __path__-Variable versteckt:

import os.path
import univention
univention.__path__.insert(0, os.path.abspath("modules/univention"))
import univention.updater.tools
import univention.config_registry
print(univention.updater.tools.__file__)
# /root/univention-updater/modules/univention/updater/tools.pyc
print(univention.config_registry.__file__)
# /usr/lib/pymodules/python2.6/univention/config_registry.pyc
Written on June 26, 2012