Найти - Пользователи
Полная версия: Проблемы с __import__
Начало » Python для экспертов » Проблемы с __import__
1
ser_gen
Здравствуйте! Есть вот такой код
для работы с плагинами

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’>

Мож кто знает в чем косяк
bialix
Я обычно использую полную форму вызова функции __import__:

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

там есть еще 4й аргумент, иногда он полезен.
А ‘/home/ser/develop/pqfp2/modules/’ – это пакет?
Впрочем в Питоне 2.5 добавлять в каталоги __init__.py стало не обязательно, чтобы сделать пакет
bialix
А вы могли бы показать всю отладочную печать вашего скрипта (у вас там ее багацько).
И из какого каталога стартует скрипт?
ser_gen
'/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”)
из интерактивного режима работает норамально.
А в чём косяк понать не могу :(
ser_gen
>> m = __import__(modname, globals(), locals())
>> там есть еще 4й аргумент, иногда он полезен.

Я в курсе, но тоже не работает
bialix
вобщето говоря весь прикол в том, что первый аргумент в __import__ должен содержать не путь со слешами, а питоновское имя модуля с точками, т.е. типа ‘modules.Example’. А вот почему оно работает в интерактивном режиме – для меня загадка
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB