Hey @all,
wenn ich ein Python script im lokalen verzeichnis habe funktioniert es auch wunderbar, jedoch sobald sich das Script in einem Unterverzeichnis (UV) befindet bekomme ich von PyImport_Import() immer NULL
Folgendes habe ich schon probiert jedoch ohne Erfolg:
1.) In das Unterverzeichnis wechseln
2.) eine leere __init__.py im Unterverzeichnis
3.) Aufrufen des Modules mittels UV.Modules
4.) vorheriges Aufrufen von
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.insert(0, '')");
PyRun_SimpleString("sys.path.insert(0, 'UV')");
Nichts hat geholfen. Wäre dankbar wenn mir jemand aus diesem Problem helfen könnte.
Vielen Dank im Voraus und LG
NoRulez
Probleme mit Unterverzeichnissen (Embedded Python + C++)
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wenn einer einen Rat wüßte, hätte er ihn vermutlich gepostet
Außerdem kann es ja durchaus sein, dass derjenige diesen Thread noch nicht gesehen hat ...
Auf jeden Fall muss man ihn nicht sofort pushen, wenn er mal nicht mehr an 3. oder 4. Stelle steht - und so weit "unten" war er nun noch wirlich nicht
Außerdem kann es ja durchaus sein, dass derjenige diesen Thread noch nicht gesehen hat ...
Auf jeden Fall muss man ihn nicht sofort pushen, wenn er mal nicht mehr an 3. oder 4. Stelle steht - und so weit "unten" war er nun noch wirlich nicht
Hi!
und im Verzeichnis uv liegt dann eine leere "__init__.py" wie auch die Datei uv.py:
GnuShi
Mhh, hift folgendes?NoRulez hat geschrieben: wenn ich ein Python script im lokalen verzeichnis habe funktioniert es auch wunderbar, jedoch sobald sich das Script in einem Unterverzeichnis (UV) befindet bekomme ich von PyImport_Import() immer NULL
Code: Alles auswählen
# u.py
from uv import uv
uv.Spam()
Code: Alles auswählen
# uv/uv.py
def Spam():
print "I like SPAM, SPAM, SPAM..."
GnuShi
@Gnushi: Funktioniert leider nicht.
Bei mir heißt der komplette Pfad am System: ./modules/python/list_dir.py
Von PyImport_Import bekomme ich danach folgende Exception:
Import Error: Couldn't found module modules.python.list_dir
Habe jetzt eine __init__.py in ./modules/__init__.py
und eine __init__.py in ./modules/python/__init__.py
Lg NoRulez
Bei mir heißt der komplette Pfad am System: ./modules/python/list_dir.py
Von PyImport_Import bekomme ich danach folgende Exception:
Import Error: Couldn't found module modules.python.list_dir
Habe jetzt eine __init__.py in ./modules/__init__.py
und eine __init__.py in ./modules/python/__init__.py
Lg NoRulez
Wie rufst Du was auf unter Python? Schreibst Du sowas wieNoRulez hat geschrieben:Von PyImport_Import bekomme ich danach folgende Exception:
Import Error: Couldn't found module modules.python.list_dir
Code: Alles auswählen
from module import python.list_dir
Zeig mal Code...
GnuShi
Also ich habe irgendwo ein fertiges python script sagen wir es liegt im Verzeichnis modules/python und heißt list_dir.py also modules/python/list_dir.py
Verzeichnisstruktur (Hauptverzeichnis => HV):
und ich möchte in meinem c++ Program (Program.exe) die Datei/Script/Module list_dir.py aufrufen mittels PyImport_Import()
im moment siehts so aus:
Der code für list_dir.py sieht wie folgt aus:
Tut aber dem Problem nichts zur sache, da in dem python script alles mögliche drinnen stehen kann, selbst mir geht es darum das er das Module list_dir.py nicht findet.
Lg NoRulez
Verzeichnisstruktur (Hauptverzeichnis => HV):
Code: Alles auswählen
HV
|
+ Program.exe
|
+ modules
| |
| + python
| |
| + list_dir.py
im moment siehts so aus:
Code: Alles auswählen
HV
|
+ Program.exe
|
+ modules
| |
| + __init__.py (leer)
| + python
| |
| + __init__.py (leer)
| + list_dir.py
Der code für list_dir.py sieht wie folgt aus:
Code: Alles auswählen
# -*- coding: cp1252 -*-
# search for filename in given directory and its subdirectories,
# but limit the depth of subdirectories to search in
import os
import string
import hashlib
class sFileInfo:
def __init__(_self, filename = "", filesize = 0, checksum = ""):
_self.filename = filename
_self.filesize = filesize
_self.checksum = checksum
def limited_walk(folder, limit, n=0):
"""
generator similar to os.walk(), but with limited subdirectory depth
"""
if n > limit:
return
for file in os.listdir(folder):
file_path = os.path.join(folder, file)
if os.path.isdir(file_path):
for item in limited_walk(file_path, limit, n + 1):
yield item
else:
yield file_path
def calcHashFromFile(filename):
fp = open(filename, "rb")
checksum = hashlib.new('md5', fp.read())
return checksum.hexdigest()
def writeIndexFile(filename, directory):
file_list = []
for fullpath in limited_walk(directory, 9999999):
file_list.append(sFileInfo(fullpath, os.lstat(fullpath).st_size, calcHashFromFile(fullpath)))
file_list.sort()
pFile = open(filename, "w")
xml_version = "1.0"
xml_encoding = "iso-8859-15"
pFile.write("<?xml version=\"%s\" encoding=\"%s\"?>\n\n" % (xml_version, xml_encoding))
pFile.write("<filelist>\n")
for f in file_list:#[1:10]:
pFile.write(" <file name=\"%s\" size=\"%ld\" checksum=\"%s\"/>\n" % (f.filename, f.filesize, f.checksum))
pFile.write("</filelist>\n")
pFile.close()
Code: Alles auswählen
print "Hello World"
Lg NoRulez
Du schreibst zwar oben, daß Du
aufrufst, aber bist Du Dir wirklich sicher, daß der Pfad im Pythonpath ist? Fehler ausgeschlossen? Also wirklich ...\modules\python drin?
Klingt blöde, ich weiß, aber manchmal passieren ja solche Dinge. Du kannst es ganz einfach im HV testen:
(Ist wahrscheinlich bloß Eulen nach Athen tragen. Tut mir leid, aber mehr fällt mir gerade nicht ein.)
Gruß,
Christian
Code: Alles auswählen
PyRun_SimpleString("sys.path.insert(0, 'UV')");
Klingt blöde, ich weiß, aber manchmal passieren ja solche Dinge. Du kannst es ganz einfach im HV testen:
Code: Alles auswählen
import sys
sys.path
Gruß,
Christian
ja habe ich, ich habe als test das script gleich nach /modules kopiert anstatt von modules/python und aufrufen tue ich
aber funktionieren tut es dennoch nicht
Lg NoRulez
Code: Alles auswählen
PyRun_SimpleString("sys.path.insert(0, 'modules')");
Lg NoRulez
Keine Hilfe für's Problem, aber:
Der Unterstrich bei `_self` ist "komisch". Warum ist der da?
Die Liste zu sortieren bringt nichts, solange `sFileInfo` keinen Vergleichsoperatoren, am besten `__cmp__()` nicht implementiert. Was bedeutet das 's' in `sFileInfo`?
Die Hashfunktion kann unangenehme Folgen haben, wenn man das mit einer *grossen* Datei versucht.
Dateinamen können Zeichen enthalten, die ungültiges XML zur Folge haben. Unter Unix kann sogar alles ausser dem Nullbyte in einem Namen sein.
Der Unterstrich bei `_self` ist "komisch". Warum ist der da?
Die Liste zu sortieren bringt nichts, solange `sFileInfo` keinen Vergleichsoperatoren, am besten `__cmp__()` nicht implementiert. Was bedeutet das 's' in `sFileInfo`?
Die Hashfunktion kann unangenehme Folgen haben, wenn man das mit einer *grossen* Datei versucht.
Dateinamen können Zeichen enthalten, die ungültiges XML zur Folge haben. Unter Unix kann sogar alles ausser dem Nullbyte in einem Namen sein.
@BlackJack, danke für die Info, mir ging es aber eigentlich um das Problem mit den Verzeichnissen. Wie gesgt war nur ein beispielscript, da kann auch einfach nur drin stehen.
Lg NoRulez
Code: Alles auswählen
print "Hello World"
Lg NoRulez