Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2007 11:28:30

ser_gen
От:
Зарегистрирован: 2006-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с __import__

Здравствуйте! Есть вот такой код
для работы с плагинами

import wx
import glob
import sys
class ModulesDialog(wx.Dialog):
def __init__(self,parent,id=-1,plist=): #plist содержит список путей для поиска
wx.Dialog.__init__(self,parent,id,“”)
bx=wx.BoxSizer(wx.VERTICAL)
bxH=wx.BoxSizer(wx.HORIZONTAL)

self.beginBtn=wx.Button(self,-1,“”)
self.infoBtn=wx.Button(self,-1,“”)
self.lb=wx.ListBox(self,-1,size=(300,300))

bxH.Add(self.beginBtn,0,0)
bxH.Add(self.infoBtn,0,0)

bx.Add(bxH,0,0)
bx.Add(self.lb,0,0)
self.SetSizer(bx)
self.Fit()
self.mlist= #СПИСОК ЗАГРУЖЕННЫХ МОДУЛЕЙ

print “PLIST=”,plist
for i in plist:
if i=='':
continue
self.loadFromPath(i)

for i in self.mlist:
self.lb.Append(self.getModuleInfo(i))

def loadFromPath(self,path):
npath=path
if path!='/':
npath+='/'
npath+=“*.py”
flist=glob.glob(npath)
if len(flist)==0:
return

print “NPATH=”,npath
print “FLIST=”,flist
module=None
for i in flist:
name=i # убираем расширение
print “Name=”,name
module=__import__(name)
print module
self.mlist.append(module)

def getModuleInfo(self,md):
return md.Method.getName()

при запуске из основной программы вылетает с исключением
Traceback (most recent call last):
File “./main.py”, line 465, in OnModules
dlg=Modules.ModulesDialog(self,id=-1,plist=self.options.split(':'))
File “/home/ser/develop/pqfp2/Modules.py”, line 34, in __init__
self.loadFromPath(i)
File “/home/ser/develop/pqfp2/Modules.py”, line 61, in loadFromPath
module=__import__(name)
ImportError: No module named /home/ser/develop/pqfp2/modules/Example


Но если в интерактивно режиме записать все работает нормально.
>>> __import__(“/home/ser/develop/pqfp2/modules/Example”)
<module ‘/home/ser/develop/pqfp2/modules/Example’ from ‘/home/ser/develop/pqfp2/modules/Example.pyc’>

Мож кто знает в чем косяк



Офлайн

#2 Янв. 22, 2007 12:44:57

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемы с __import__

Я обычно использую полную форму вызова функции __import__:

m = __import__(modname, globals(), locals())

там есть еще 4й аргумент, иногда он полезен.
А ‘/home/ser/develop/pqfp2/modules/’ – это пакет?
Впрочем в Питоне 2.5 добавлять в каталоги __init__.py стало не обязательно, чтобы сделать пакет



Офлайн

#3 Янв. 22, 2007 12:46:32

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемы с __import__

А вы могли бы показать всю отладочную печать вашего скрипта (у вас там ее багацько).
И из какого каталога стартует скрипт?



Офлайн

#4 Янв. 22, 2007 13:08:25

ser_gen
От:
Зарегистрирован: 2006-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с __import__

'/home/ser/develop/pqfp2/modules/' - нет это просто каталог
Вся отладочная инфа:
PLIST=
NPATH= /home/ser/develop/pqfp2/modules/*.py
FLIST=
Name= /home/ser/develop/pqfp2/modules/Example
Traceback (most recent call last):
File “./main.py”, line 466, in OnModules
dlg=Modules.ModulesDialog(self,id=-1,plist=self.options.split(':'))
File “/home/ser/develop/pqfp2/Modules.py”, line 34, in __init__
self.loadFromPath(i)
File “/home/ser/develop/pqfp2/Modules.py”, line 61, in loadFromPath
module=__import__(name)
ImportError: No module named /home/ser/develop/pqfp2/modules/Example

Скрипт стартует из /home/ser/develop/pqfp2/main.py

Весь прикол в том, что код
>> __import__(“/home/ser/develop/pqfp2/modules/Example”)
из интерактивного режима работает норамально.
А в чём косяк понать не могу :(



Офлайн

#5 Янв. 22, 2007 13:10:03

ser_gen
От:
Зарегистрирован: 2006-09-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с __import__

>> m = __import__(modname, globals(), locals())
>> там есть еще 4й аргумент, иногда он полезен.

Я в курсе, но тоже не работает



Офлайн

#6 Янв. 22, 2007 13:24:37

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблемы с __import__

вобщето говоря весь прикол в том, что первый аргумент в __import__ должен содержать не путь со слешами, а питоновское имя модуля с точками, т.е. типа ‘modules.Example’. А вот почему оно работает в интерактивном режиме – для меня загадка



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version