LINUX.ORG.RU

Помогите опакетить питономодуль

 ,


1

3

Имеем такую структуру модуля:

proj/
    proj/
        lib.py
        lib2.py
        hide.py
        hide2.py
    setup.py
Вот как скрыть эти hide, hide2? Чтобы нельзя было делать from proj import hide? __hide.py, _hide.py - не помогает

★★★★

Последнее исправление: FIL (всего исправлений: 1)

Насколько мне известно это невозможно. Максимум, что ты можешь сделать, назвать модуль начиная с символа нижнего подчёркивания, тем самым предупредив пользователей этого пакета, что использовать этот модуль чревато поломками.

Kilte ★★★★★
()

в модулях hide и hide2 написать:

def __func():
    res = None
    import os, inspect
    for i in inspect.stack()[2:]:
        if not i[1].startswith('<frozen '):
            res = [__file__, i[1]]
            break
    if res:
        res = [os.path.dirname(i) for i in res]
        if res[0] == res[1]:
            return
    raise ImportError("private module")
__func()

anonymous
()
proj/
    proj/
        hide/
            hide.py
            hide2.py
        lib.py
        lib2.py
    setup.py

hide/hide2 доставать руками.

Второй вариант:

Написать в основном модуле свой хук для импорта, в котором запретить импортировать внутренние модули, и заменить им __builtin__.__import__.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.