2015-06-11 3 views
0

У нас есть что-то похожее на это:Python EGG: включают верхнего уровня реж

/dir/ 
    subdir1/ 
      subdir1-1/ 
        (some module) 
        setup.py 
      subdir1-2/ 
        (another module) 
    subdir2/ 
      (another module) 

Код из subdir1-2 использования (= импорт) код из модуля subdir2. Все в порядке, пока мы не хотим упаковать subdir2 в EGG (из subdir1-1) и повторно использовать его. Кажется, EGG не может упаковать что-либо из более высокого уровня.

Наш setup.py:

data_files=[ 
    (root, [os.path.join(root, f) for f in files]) 
    for root, _, files in itertools.chain(
     os.walk('some_module'), 
     os.walk('../subdir2'), # DOES NOT WORK! 
     os.walk('../../subdir2), # DOES NOT WORK! 
     os.walk(os.path.join(current_dir, '..', 'subdir2')), # DOES NOT WORK 
     os.walk(os.path.join(current_dir, '..', '..', 'subdir2')) # DOES NOT WORK AS WELL! 
    ) 
], 

Мы также попытались добавить модуль к sys.path - не работает. Любой модуль, который находится во внутреннем каталоге, работает хорошо. Любой модуль из каталога более высокого уровня - не работает.

Я пишу это по памяти, поэтому, пожалуйста, не смотрите на ошибки в коде, который я изложил выше, - в нашем коде мы написали 100% правильный код - никаких опечаток, нигде неправильного уровня (например .. вместо из ../ ..).

Проблема заключается именно в этом: выходы более высокого уровня не входят в состав EGG; или мы не можем их использовать.

Ответ отсюда: top-level package handling with setuptools (or another python egg builder) не работает.

Scrapyd 0.24, Python 2.7 (стандартный пакет Ubuntu 14.04 x64).

Спасибо!

P.S. Мы используем Scrapyd, который упаковывает код в EGG. И очень тяжело отлаживать такое «умное» решение (в конце концов, кто решил использовать такое решение для ночного видения? Если бы мы могли выбросить Scrapyd ...).

ответ

0

Переместить setup.py в/dir/и переписать все ваши материалы соответственно.

Принцип работы subdir1-1 - это корень вашего дерева сборки, поэтому нет, вы не можете пройти выше этого. Работы внутри получающегося яйца тоже, поэтому вы не можете включать в себя более высокие уровни и, вы не могли бы использовать их, если бы сделали это.