Erste Schritte mit Boost.Python



  • ich versuche jetzt schon seit stunden ein python modul mit boost.python zu erstellen, auf grundlage von diesem tutorial: http://www.boost.org/doc/libs/1_37_0/libs/python/doc/tutorial/doc/html/index.html

    es will aber einfach nicht funktionieren. ich hab extrem viel probiert, aber nichts hat geklappt, deshalb fasse ich möglichst kurz zusammen:

    wenn ich versuche, die dll mit bjam zu bauen, bekomme ich gar keine dll, sondern nur eine hello_ext.lib. das habe ich aber erst jetzt versucht, und bin deshalb noch nicht näher drauf eingegangen. anfangs hatte ich die dll nämlich mit msvc9.0 gebaut, was auch prima funktionierte. den code habe ich 1:1 aus dem tutorial kopiert, die fertige dll ins python root-verzeichnis kopiert, allerdings wurde das modul von python nicht gefunden:

    import hello_ext
    ...
    ImportError: No module named hello_ext
    

    naja, da das genau der weg ist, wie er im tutorial beschrieben wurde, will ich hier den anderen mist mal unerwähnt lassen. die dinge hatte ich teils von mailinglisten und jetzt sowieso nicht mehr genau zur hand.

    vllt. erkennt ja jemand, was da schief gelaufen sein könnte, oder hat lust, es selbst durchzuprobieren.

    DANKE IM VORAUS!!



  • ich mach es nur ungern, aber brauche dringend hilfe!!

    *push*



  • python on the rocks schrieb:

    die fertige dll ins python root-verzeichnis kopiert, allerdings wurde das modul von python nicht gefunden:

    Also wenn dann gehört das nicht ins root verzeichnis
    sondern da wo die anderen auch sind. Zusätzlich (glaub ich zumindest) sollte man die dlls dann in *.pyd umbenennen

    Dann probiers mal mit nem verzeichnis deren struktur so aussieht:

    test.py
    hello_ext.pyd
    

    und test.py folgendes enthält:

    #!/usr/bin/python
    import hello_ext
    
    hello_ext.greet()
    

    BR
    Vinzenz



  • das mit dem root-verzeichnis habe ich aus der python-doku, glaube ich! ich hab jetzt noch drei varianten (nochmal) ausprobiert, diese wären:

    1.) hello_ext.pyd ins verzeichnis "Lib/site-packages/hello_ext" gepackt:

    Traceback (most recent call last):
      File "C:\Python26\Lib\site-packages\hello_ext\test.py", line 1, in <module>
        import hello_ext
    ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.
    

    2.) hello_ext.dll im selben verzeichnis:

    Traceback (most recent call last):
      File "C:\Python26\Lib\site-packages\hello_ext\test.py", line 1, in <module>
        import hello_ext
    ImportError: No module named hello_ext
    

    3.) ins selbe verzeichnis zusätzlich eine __init__.py verpasst:

    from hello_ext import *
    
    Traceback (most recent call last):
      File "C:\Python26\Lib\site-packages\hello_ext\test.py", line 2, in <module>
        print hello_ext.greet()
    AttributeError: 'module' object has no attribute 'greet'
    

    😞



  • Alles was unter site-packages liegt und ein Verzeichnis ist, braucht eine __init__.py, denn das ist auch ein Paket dann...
    Deine test.py macht dann entweder

    import hello_ext
    hello_ext.hello_ext.greet()
    

    oder

    from hello_ext import *
    hello_ext.greet()
    

    oder

    from hello_ext.hello_ext import greet as hext_greet
    hext_greet()
    

    Oder
    ... (wie man halt Sachen in Python machen will und kann)

    Der letzte von dir gepostete Fehler (AttributeError: 'module' object has no attribute 'greet') ist darauf zurück zu führen, dass du eben das Verzeichnis nicht als Paketname beim import/methodenaufruf gewertet hast.

    Grüße
    Franz



  • Nein, das ändert auch nichts...

    >>> Traceback (most recent call last):
      File "C:\Python26\Lib\site-packages\hello_ext\test.py", line 2, in <module>
        print hello_ext.hello_ext.greet()
    AttributeError: 'module' object has no attribute 'hello_ext'
    

Anmelden zum Antworten