flexiabler Titel Rotating Header Image

Zope

Plone (buildout) verliert Dateien – ImportError: No module named … (Windows only)

Windows erlaubt sich hin und wieder (wann und warum konnte ich noch nicht raus finden) Files im eggs Verzeichnis des buildouts zu löschen. Unter Linux/Mac passiert dies nicht! Ich vermute es liegt an den Symlinks (junction.exe) welche Windows in Verbindung mit omelette durcheinander bringen. Beim Starten der Instanz findet Plone dann benötigte Module nicht mehr:

2010-03-30 10:10:41 ERROR Application Could not import Products.FCKeditor
Traceback (most recent call last):
  File "D:\dev\test\parts\zope2\lib\python\OFS\Application.py", line 709, in im
port_product
    product=__import__(pname, global_dict, global_dict, silly)
  File "d:\dev\test\eggs\products.fckeditor-2.6.3.test.0.1-py2.4.egg\Products\FC
Keditor\__init__.py", line 5, in ?
    from Products.CMFCore.DirectoryView import registerDirectory
ImportError: No module named CMFCore.DirectoryView
Traceback (most recent call last):
  File "D:\dev\test\parts\instance-dev\bin\servicewrapper.py", line 140, in ?
    run.run()
  File "D:\dev\test\parts\zope2\lib\python\Zope2\Startup\run.py", line 21, in r
un
    starter.prepare()
  File "D:\dev\test\parts\zope2\lib\python\Zope2\Startup\__init__.py", line 102
, in prepare
    self.startZope()
  File "D:\dev\test\parts\zope2\lib\python\Zope2\Startup\__init__.py", line 278
, in startZope
    Zope2.startup()
  File "D:\dev\test\parts\zope2\lib\python\Zope2\__init__.py", line 47, in star
tup
    _startup()
  File "D:\dev\test\parts\zope2\lib\python\Zope2\App\startup.py", line 45, in s
tartup
    OFS.Application.import_products()
  File "D:\dev\test\parts\zope2\lib\python\OFS\Application.py", line 686, in im
port_products
    import_product(product_dir, product_name, raise_exc=debug_mode)
  File "D:\dev\test\parts\zope2\lib\python\OFS\Application.py", line 709, in im
port_product
    product=__import__(pname, global_dict, global_dict, silly)
  File "d:\dev\test\eggs\products.fckeditor-2.6.3.test.0.1-py2.4.egg\Products\FC
Keditor\__init__.py", line 5, in ?
    from Products.CMFCore.DirectoryView import registerDirectory
ImportError: No module named CMFCore.DirectoryView

Schaut man in eggs/Products.CMFCore nach, sieht man das dort keine Files mehr vorhanden sind.

Als sichere Lösung empfiehlt es sich die Files von buildout neu erstellen zu lassen:

  1. Im buildout directory das parts / bin und eggs Verzeichnis löschen
  2. “python bootstrap.py” neu ausführen
  3. “bin/buildout” ausführen

Nun sollte buildout alle eggs neu laden und installieren. Außerdem wird Zope und die Instance neu erstellt.

Wer die Ursache kennt, kann es mir gern mitteilen :)

Erstellen von Python Eggs per setuptools (in 3 Minuten)

Hier wird beschrieben welche Schritte zum Erstellen eines neuen Python Eggs oder einer neuen Version notwendig sind.

Generierung von *.egg Files aus Development Eggs (meist im /src Ordner)

  1. In setup.py und profiles/default/metadata.xml die Version erhöhen.
  2. Im docs/ Verzeichnis die HISTORY.txt aktualisieren. Um Versionsnummer erweitern und die Änderungen vermerken.
  3. Mögliche Anpassungen in der README.txt oder docs/INSTALL.txt vornehmen.
  4. Im Egg-Verzeichnis z.B: flex.plonetheme/ diesen Befehl ausführen:
  5. python setup.py bdist_egg
  6. Im dist/ Verzeichnis befindet sich das automatisch erstellte Egg.

Weitere Infomationen

Detailierte Versionsinformationen

Über die Datei setup.cfg können weitere Versionseigenschaften gesteuert werden.

Z.B:

[egg_info]
tag_build = dev
tag_svn_revision = true

Hier bekommt das Egg diesen Namen “flex.plonetheme-0.9.9dev_r584-py2.4.egg”. Es wird ein “dev” sowie die SVN Revision angehängt. Löscht man die setup.cfg wir ein Produktiv-Egg erstellt (flex.plonetheme-0.9.9-py2.4.egg).

Versionen und Buildout

Buildout versucht immer das aktuellste Egg zu holen. Höhere Versionen haben Vorrang!

Verweise

http://log.onthebrink.de/2008/02/python-egg-fun.html

http://ianbicking.org/docs/setuptools-presentation/

Beschleunigung Zope im Debug Mode (nur unter Windows)

Durch das auskommentieren dieses if- Blocks wird der Reload der Plone/Zope Seiten wesentlich schneller:

Im vom Buildout erstellten Verzeichnis “parts/plone/CMFCore/” die Datei “DirectoryView.py” öffnen.

Ab Zeile 166 steht dort:

mtime = stat(self._filepath)[8]
if platform == 'win32':
# some Windows directories don't change mtime
# when a file is added to or deleted from them :-(
# So keep a list of files as well, and see if that
# changes
path.walk(self._filepath, self._walker, filelist)
filelist.sort()

Die Zeile 167 “if platform == ‘win32′:” mit “if platform == ‘xxxwin32′:” ersetzen. Zope nun neu starteten.

Soweit ich das verstanden habe, benötigt “path.walk” sehr lange, dieser Check ist unter Windows mit NTFS Filesystem jedoch unnötig. Änderungen werden auch ohne diesen Check erkannt.

Funktioniert nur unter Windows und wenn der Zope Server mit “debug-mode on” läuft.