Probleme mit Scientific_netcdf

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mod_che
User
Beiträge: 46
Registriert: Freitag 13. April 2007, 16:58

Hallo,
ich möchte im Rahmen meines Praktikums eine Python-Kopplung zwischen zwei Modellen (Thema: Modellierung in der Hydrologie) wieder herstellen. D.h. diese Kopplung als gw.py-Datei lief schon mal, soll jetzt aber auf Python 2.4 laufen. Dabei habe ich einige Probleme!

Die Pythondatei wird von der Modellkopplungdatei gw.cpp gerufen. Ich habe dies im Debugger verfolgt und folgende Schritte funktionieren auch, inhaltliche Hintergründe nun einmal außen vor:

gw.py -->
import mf2000exe.py (datei mf2000.py vorhanden!)
dort wird dann "import output" gerufen, diese output.py funktioniert auch

dann wird dort "import netcdf.NetCDF" gerufen, dabei ist die Datei NetCDF.py im Verzeichnis /netcdf auch vorhanden, dort liegt auch die netcdf.dll (für python24.dll).

In NetCDF.py kommt folgender Code:

Code: Alles auswählen

else:

    # This is the real code.
    from Scientific_netcdf import *
    from Scientific_netcdf import _C_API
    import os

    _NetCDFFile = NetCDFFile
    def NetCDFFile(filename, mode=None, history=None):
        filename = os.path.expanduser(filename)
        args = (filename,)
        if mode is not None:
            args = args + (mode,)
            if history is not None:
                args = args + (history,)
        return apply(_NetCDFFile, args)

    del sys
welcher dann nicht mehr funktioniert!!! Mein Programm stürzt ab. Bei der Zeile

Code: Alles auswählen

    
    from Scientific_netcdf import *
    from Scientific_netcdf import _C_API
ist Schluss. Es erscheint ein fatal Eroor: Cant initialize module: scientific_netcdf.
Diese Datei liegt aber im Verzeichnis als .pyd, .pyc und .py
netcdf.dll ist vorhanden, _init_.py auch.

Nun habe ich im Terminal ein paar tests gemacht:

Code: Alles auswählen

C:\DOCUME~1\PRAKTI~1.INT>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import numpy
>>> import Scientific
>>> from Scientific_netcdf import *
Fatal Python error: can't initialize module Scientific_netcdf

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

C:\DOCUME~1\PRAKTI~1.INT>
Ich benutze Python 2.4 auf einem Windows Xp Prof. Computer. Numpy und ScientificPython 2.6 ist installiert, beide funktionieren ja gemäß den import-Anweisungen auch.

Ich weiss wirklich nicht mehr weiter und habe schon einige Versionen der netcdf.dll aus dem Netz ausprobiert. Davor hatte ich Fehler, weil ich python23.dll's installiert hatte, welche aus allen Verzeichnissen entfernt wurden.

Ich habe in der netcdf.dll Datei nachgesehen, welche DLLS dort gerufen werden:
python24.dll
msvcrt.dll
msvcr71.dll
kernel32.dll
(alle vorhanden!!!)

Weiss jemand rat und Linktipps oder hatte ähnliche Probleme? Ich antworte auch gerne mit weiteren Angaben, falls welche fehlen. Vielen Dank
Michael
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mod_che hat geschrieben:Weiss jemand rat und Linktipps oder hatte ähnliche Probleme? Ich antworte auch gerne mit weiteren Angaben, falls welche fehlen.
Ich tippe auf Bugs in der ``Scientific_netcdf.pyd``, aber die Webseite von Scientific Python ist down, da kann man im Moment leider nicht nachschauen :x
So wie das aussiehst, kannst du da ncht viel machen, außer die Bugs im C-Quelltext zu korrigieren und dann das Modul neu zu kompilieren. Vielleicht mal den Autor anschreiben?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mod_che
User
Beiträge: 46
Registriert: Freitag 13. April 2007, 16:58

Ich sehe jetzt nicht ganz welche Website Du genau meinst, über http://sourcesup.cru.fr/frs/?group_id=180 lässt sich die Version für Python24 und WinXP besorgen - diese wird auch von mir benutzt.
Wie kommst Du auf den "Bugs"-Hinweis?
mod_che
User
Beiträge: 46
Registriert: Freitag 13. April 2007, 16:58

Ich habe eine Lösung für mein Problem gefunden und möchte diese natürlich auch bereitstellen.

Die netCDF Ressourcen lassen sich in meinem Fall durch "pynetcdf 0.7" (http://cheeseshop.python.org/pypi/pynetcdf/) ersetzen. Dieses Built arbeitet mit Numpy zusammen, welches ich ja schon für Numeric eingesetzt habe.

Dabei habe ich die kompilierten Dateien (u.a. netCDF.py) einfach in ein weiteres Unterverzeichnis des Projektes /pynetcdf gelegt und die Verweise in allen Pythondateien geändert und /netcdf dort gelöscht.
Danach musste ich nur noch die "alte" netcdf.dll in das neue /pynetcdf Verzeichnis kopieren und der Error war behoben.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mod_che hat geschrieben:Wie kommst Du auf den "Bugs"-Hinweis?
Weil normalerweise eine Exception kommt. Aber bei dir ist die C-Extension gecrasht, die dann noch den Interpreter mitgezogen hat. So ein Fehler ist "critical".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten