2015-03-19 6 views
2

Я пытаюсь построить пакет, имеющий следующую структуру:Python Setuptools: пакет не установлен, даже если найден через find_packages

main-dir/ 
    setup.py 
    package/ 
     __init__.py 
     bar/ 
      __init__.py 
     baz/ 
      __init__.py 
    package_foo/ 
     __init__.py 
     boo/ 
      __init__.py 

Использование find_packages() в setup.py я получаю правильный список пакетов, что-то вроде:

[ 
    'package', 
    'package.bar', 
    'package.baz', 
    'package_foo', 
    'package_foo.boo', 
] 

Однако, когда я установить пакет, я получаю только package установлен в каталоге site-packages и package_bar нигде не видно. Еще более странно, если я переименую каталог package (скажем, packagee), он также не будет установлен.

Просто чтобы быть ясно, что я пытаюсь получить как package и package_foo, установленный на верхнем уровне site-packages, как это:

import package 
import package_foo 

Любые предложения, какой маршрут идти?

ОБНОВЛЕНИЕ: Мне нужно уточнить, что проблема возникает только при отправке пакета на сервер devpi, который я запускаю локально; a python setup.py build правильно создает оба пакета в каталоге build/lib.linux-x86_64-2.7/.

ответ

1

ОК, мне удалось выяснить проблему: выясняется, что devpi upload по умолчанию использует любую систему управления версиями, которую он находит в пакете, и строит дистрибутив оттуда. Поскольку мои изменения еще не были выполнены, он продолжал строить из старого кода, который не включал каталог package_foo. К счастью, возможность игнорировать управление версиями предусмотрена, поэтому правильная команда для использования является:

devpi upload --no-vcs 

Конечно, я планирую иметь пакет правильно версионный для финальной версии, но все равно нужен создавать и загружать распределение во время развитие.

Смежные вопросы