Найти - Пользователи
Полная версия: Инструкция __import__ для модулей с русским названием
Начало » Python для новичков » Инструкция __import__ для модулей с русским названием
1 2 3
pythonwin
PooH
Только сегодня копался в жаба-скрипте с комментариями на китайском. Желаете поработать с модулями названными на нем же? wink
с одной стороны это было бы интересно для 1С программистов, которые пишут какой-то модуль по интеграции чего-то с чем-то на питоне, но на счет китайского согласен, хотя у самого комментарии в коде в основном на русском.
sypper-pit
получить переходный модуль от 1С в питон , это уже мысль …. надо учить 1С и перекидывать строки .. тогда жестко программируем будет питон с 1С и наоборот .. тогда можно будет очень интересные штуки творить :) на питоне и перебрасывать в 1С :)
nJLyTo
Ребят, сделал так, но на этот раз получаю ошибку invalid syntax в функции compile():

Программа:
class Test:
def connect_plugin(self, module_name):
module_name += u'.py'
dir_file = chr(92).join([u'c:\\PlugIns', module_name])
try:
f = open(dir_file, 'rt')
obj = compile(f.read(), module_name, 'eval')
globals()['pl'] = eval(obj)
pl.run()
except Exception, ex:
f.close()
print unicode(ex)

t = Test()
t.connect_plugin('new_plugin')
Плагин:
class New_Plugin:
def __init__(self):
self.text = u'Ok'
def run(self):
print self.text
Ferroman
Трейсбек в студию
nJLyTo
В том-то и дело, что показывать нечего: invalid syntax (line 1). Ошибка, как я понимаю, происходит при компиляции плагина.
ZZZ
nJLyTo
dir_file = chr(92).join()
Замени на:
os.path.join(u'c:\\PlugIns', module_name)
Ну это так, к слову.

nJLyTo
obj = compile(f.read(), module_name, ‘eval’)
А module_name не должен быть в ASCII?
Я бы предложил перевод в транслит. Ну и пробелы на подчерк заменить… Просто ривести имя модуля в подобающий вид.
Или вообще, взять md5.hexdigest плагина и забить на всё.
nJLyTo
Я бы предложил перевод в транслит. Ну и пробелы на подчерк заменить… Просто привести имя модуля в подобающий вид.
t.connect_plugin('new_plugin')
до пробы с русскими названиями пока даже не дошел.
ZZZ
Или вообще, взять md5.hexdigest плагина и забить на всё.
а можно чуть подробнее? Как этот модуль может мне помочь?

Кстати, здесь есть интересный пример компиляции файлов, но и это мне не помогло :)
ZZZ
А наглядел в коде пару ошибок.

Начать надо с того, что вот это жж не с проста:
if codestring and codestring[-1] != '\n':
codestring = codestring + '\n'
Очень похоже, что оно.

И ещё:
nJLyTo
globals() = eval(obj)
pl.run()
Если я правильно понимаю, то pl, это объект-модуль… А как же создать эксемпряр класса pl.New_Plugin? Или я чего-то не так въезжаю? Никогда сам такими извращениями не страдал и сейчас мне не требуется, так что в доки по compile не полезу по причине природной ленивости.

nJLyTo
а можно чуть подробнее? Как этот модуль может мне помочь?
Для того, чтобы создать уникальное ASCII-имя для плагина. Это когда с русскими именами работать начнёте.

Добавленно:
Моё природное любопытство взяло верх…
Хм… Использовать ‘eval’ как-то не красиво… Всё-таки модуль, это не “single expression”.
Лучше сделайте через ‘exec’ и регистрируйте плагин из самого плагина. Ну типа сделайте базовый класс для всех плагинов в __init__ которого воткните что-то вроде: __builtin__.register_plugin(self). Написать функцию register_plugin и воткнуть её в __builtin__ проблем не составит.
Dimka665
может стоит определять в плагине переменную с определенным именем, которая будет содержать название плагина?
например,
__RUSSIAN_OR_NOT_RUSSIAN_PLUGIN_NAME__ = u“мой плагинчик”
ZZZ
Dimka665
может стоит определять в плагине переменную с определенным именем, которая будет содержать название плагина?
Скорее, это будет аттрибут класса плагина. MyPlugin.name. Но это уже частности.
Речь идёт о том, что имя модуля не может быть русским и просить плагонописателя приводить его в ASCII, ИМХО, не очень хорошо.
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