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 umbenennenDann 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 entwederimport 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'