Frage
Antwort
Alle PythonScript werden innerhalb von Zope in einer Sandbox mit eingeschränkten Rechten ausgeführt. Nur eine kleine Anzahl von Modulen kann direkt importiert werden.
Wenn man andere Module zulassen will so muß man den Instruktionen in "lib/python/Products/PythonScripts/README.txt" folgen:
- unter lib/python/Products ein neues Verzeichnis "GlobalModules" anlegen
- innerhalb des neuen Verzeichnisses eine Datei names "__init__.py" anlegen
- editieren Sie __init__.py und rufen Sie die
allow_moduleMethode auf (zu Importieren aus Products.PythonScripts.Utility).Beispiel:
# Global module assertions for Python scripts from Products.PythonScripts.Utility import allow_module allow_module('base64') allow_module('re')
Wenn man vollen Zugriff auf alle Python Module benötigt, sollte man drüber nachdenken, ob man den Code nicht besser in einer ExternalMethod oder gleich in einem Filesystem-basierten Zope Produkt unterbringt.
Als weitere Alternative kann man TrustedExecutables von Dieter Maurer verwenden. Diese implementieren PythonScript und Pagetemplate Funktionalitäten ohne jegliche Sicherheitschecks. Achtung: TrustedExecutables sollte man wirklich nur dann und dort einsetzen, wenn man sich über die Sicherheitsauswirkungen genaustens im Klaren ist.