Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2014 21:08:03

Kentzo
Зарегистрирован: 2014-04-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог ihooks на Python 3

Занимаюсь портированием старого кода, написанного еще во времена 2.4, на третью версию.

Столкнулся со следующим куском кода:

def _getCOMModuleForLocation(self, componentFile):
    fqn = componentFile.path
    mod = self.com_modules.get(fqn)
    if mod is not None:
        return mod
    import ihooks, sys
    base_name = os.path.splitext(os.path.basename(fqn))[0]
    loader = ihooks.ModuleLoader()
    module_name_in_sys = "component:%s" % (base_name,)
    stuff = loader.find_module(base_name, [componentFile.parent.path])
    assert stuff is not None, "Couldnt find the module '%s'" % (base_name,)
    py_mod = loader.load_module( module_name_in_sys, stuff )
    # Make and remember the COM module.
    comps = FindCOMComponents(py_mod)
    mod = self.moduleFactory(comps)
        
    self.com_modules[fqn] = mod
    return mod

Насколько я понял, ihooks в свое время был в основе __import__. А что сейчас (2.6-3.4)?

Отредактировано Kentzo (Апрель 13, 2014 21:08:18)

Офлайн

#2 Апрель 14, 2014 07:40:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

Аналог ihooks на Python 3

python.org. import
вот там importlib

python 2.4.6

>>> print ihooks.__doc__
Import hook support.

Consistent use of this module will make it possible to change the
different mechanisms involved in loading modules independently.

While the built-in module imp exports interfaces to the built-in
module searching and loading algorithm, and it is possible to replace
the built-in function __import__ in order to change the semantics of
the import statement, until now it has been difficult to combine the
effect of different __import__ hacks, like loading modules from URLs
by rimport.py, or restricted execution by rexec.py.

This module defines three new concepts:

1) A "file system hooks" class provides an interface to a filesystem.

One hooks class is defined (Hooks), which uses the interface provided
by standard modules os and os.path. It should be used as the base
class for other hooks classes.

2) A "module loader" class provides an interface to search for a
module in a search path and to load it. It defines a method which
searches for a module in a single directory; by overriding this method
one can redefine the details of the search. If the directory is None,
built-in and frozen modules are searched instead.

Two module loader class are defined, both implementing the search
strategy used by the built-in __import__ function: ModuleLoader uses
the imp module's find_module interface, while HookableModuleLoader
uses a file system hooks class to interact with the file system. Both
use the imp module's load_* interfaces to actually load the module.

3) A "module importer" class provides an interface to import a
module, as well as interfaces to reload and unload a module. It also
provides interfaces to install and uninstall itself instead of the
default __import__ and reload (and unload) functions.

One module importer class is defined (ModuleImporter), which uses a
module loader instance passed in (by default HookableModuleLoader is
instantiated).

The classes defined here should be used as base classes for extended
functionality along those lines.

If a module importer class supports dotted names, its import_module()
must return a different value depending on whether it is called on
behalf of a "from ... import ..." statement or not. (This is caused
by the way the __import__ hook is used by the Python interpreter.) It
would also do wise to install a different version of reload().


>>>



Офлайн

#3 Апрель 14, 2014 11:29:51

Kentzo
Зарегистрирован: 2014-04-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог ihooks на Python 3

py.user.next
python.org. importвот там importlib
Спасибо, но importlib это из python 3.1

Хотелось бы покрыть 2.6-3.4 без пробелов. Это возможно?

Офлайн

#4 Апрель 15, 2014 02:15:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

Аналог ihooks на Python 3

Kentzo
Спасибо, но importlib это из python 3.1
вообще-то, ссылка ведёт на 3.4.0, но и в 3.5.0a0 то же самое

https://docs.python.org/3.5/library/modules.html

Kentzo
Хотелось бы покрыть 2.6-3.4 без пробелов. Это возможно?
лучше разветвить
иначе получится мешанина, которую никто не будет поддерживать



Отредактировано py.user.next (Апрель 15, 2014 02:20:07)

Офлайн

#5 Апрель 15, 2014 05:40:11

Kentzo
Зарегистрирован: 2014-04-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог ihooks на Python 3

py.user.next
вообще-то, ссылка ведёт на 3.4.0, но и в 3.5.0a0 то же самое
Я имел ввиду, что ihooks покрывает python 2.3-2.7
importlib покрывает 3.1-3.x

А что для 3.0? Или про 3.0 лучше забыть, поскольку это был чисто технический релиз не попавший в мажорные дистрибутивы Linux?

py.user.next
лучше разветвить
иначе получится мешанина, которую никто не будет поддерживать
Да, так и сделаю. Но это такой код, который после портирования еще 10 лет никто смотреть не будет

Офлайн

#6 Апрель 15, 2014 09:35:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

Аналог ihooks на Python 3

Kentzo
после портирования еще 10 лет никто смотреть не будет
ты сам в этот код заглянешь, но не вспомнишь ни строчки
а заглянешь ты в него, когда приложение выдаст какой-нибудь сбой

Kentzo
А что для 3.0? Или про 3.0 лучше забыть
для 3.0 отдельную ветвь сделать и реализовать там надёжный костыль



Офлайн

#7 Апрель 15, 2014 18:14:39

Kentzo
Зарегистрирован: 2014-04-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог ihooks на Python 3

для 3.0 отдельную ветвь сделать и реализовать там надёжный костыль
Собственно об этом и тема. Чем заменить?

Отредактировано Kentzo (Апрель 15, 2014 18:15:04)

Офлайн

#8 Апрель 17, 2014 06:16:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9879
Репутация: +  853  -
Профиль   Отправить e-mail  

Аналог ihooks на Python 3

Kentzo
Собственно об этом и тема. Чем заменить?
прямо в ihooks посмотри



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version