LINUX.ORG.RU

setup.py и мусор в PROJECT_ROOT

 ,


1

2

Как заставить setup.py сохранять *.egg и *.egg-info не в корне проекта (где собственно и лежит setup.py), а в какой-нибудь другой директории? Такая фигня возникает в 2-х случаях:

  • Если запускать setup.py test, когда не все зависимости (ну их яйца) лежат в site-packages виртуального окружения. Тогда запускается build с inplace и все неустановленные зависимости пакетов начинают появляться в корневой папке проекта. Не очень приятно, хочется их отправлять либо в PROJECT_ROOT/eggs/, либо отправлять в site-packages. Такая же фигня возникает, если прописать зависимости в setup_requires. Возможно ли добиться настройками в setup.cfg ,или ещё как-нибудь, сохранения яиц в подкаталоге проекта, а не в его корне?
  • Если запустить setup.py develop, то в корне проекта начинают появляться *.egg-info. Их тоже хочется куда-нибудь скинуть в одну папку (PROJECT_ROOT/eggs-info/ например). Можно прописать в setup.cfg такую вещь:
    [egg_info]
    egg_base = eggs-info
    
    Тогда .egg-info сохраняется куда надо, и даже pip видит, что пакет установлен. Но sys.path тогда будет содержать папку PROJECT_ROOT/eggs-info/ с метаинфой пакета, но не будет содержать PROJECT_ROOT, и импортёр не найдёт собственно сами исходники пакета.

Отсюда у меня вытекают такие вопросы:

  • Есть ли способ установить через setup.py всякие допзависимости из extras_require? Или это только через easy_install/pip? Либо, может есть возможность настройки запуска setup.py такая, чтобы отправлять яйца в подпапку корня проекта, но опять же, чтобы они были доступны для импорта.
  • Как перемещать при запуске команды develop папки с метаинфой в подпапку корня проекта, но так, чтобы сам корень попадал в easy-install.pth, и, собственно, нормально импортировался.

Если запустить setup.py develop, то в корне проекта начинают появляться *.egg-info

И чем они тебе мешают?

bj ()

Есть ли способ установить через setup.py всякие допзависимости из extras_require?

Я для своих пакетов просто делаю requirements-test.txt. Даже полный идиот способен понять что с ним делать. Пляски вокруг setup.py утомляют.

bj ()
Ответ на: комментарий от bj

Ну я эти зависимости прописал в сетапе, и ставлю их просто через пип (pip install -e .[dev]). Просто хотел узнать, можно ли обойтись только силами setuptools.

memnek ()
Ответ на: комментарий от bj

Не хочу видеть это в дереве проекта. Хотел просто складировать их в 1-й папке, которая в проекте не видна. Опять же, просто интересно было, можно ли настроить это силами сетапа. Придётся по-старинке юзать гитигноры и исключать все egg-info вручную (хотя их, в отличие от яиц, намного меньше).

memnek ()
Ответ на: комментарий от true_admin

Нет конечно. Зависимости прописываю в setup.py:

dev_requirements = core_requirements + extra_requirements + docs_requirements + tests_requirements + ещё что-то
setup(
    ...
    extras_require={
        ...
        'dev': dev_requirements
    }
)
А пип позволяет устанавливать только необходимые наборы зависимостей, которые описаны в extras_require. Просто один раз вызываю его вначале разработки или при изменении зависимостей, чтобы при тестах яйца были уже в site-packages и не плодились в корне проекта.

memnek ()
Ответ на: комментарий от memnek

Для старых distutils (или setuptools, я запутался) был параметр в setup.cfg где можно было задать рабочий каталог, если не путаю.

Как щас не знаю, там за последние несколько лет всё перехреначили (по крайней мере в третьем питоне) и я не знаю на сколько setup.cfg вообще релевантен сейчас.

true_admin ★★★★★ ()
Ответ на: комментарий от memnek

Просто один раз вызываю его вначале разработки или при изменении зависимостей, чтобы при тестах яйца были уже в site-packages и не плодились в корне проекта.

Собственно это нормальная практика, по venv'у на разрабатываемый пакет.

bj ()
Ответ на: комментарий от bj

Ну я имел ввиду, исключать из дерева проекта в IDE. Я хз как в пайчарме сделать директории игнорируемыми по регекспу. А гитигнор стоит довольно пуленепробиваемый.

memnek ()
Ответ на: комментарий от true_admin

Ну да, в чужих проектах в конфиге я встречал в основном настройки для всяких плагинов и дополнений (тесты, pylint, pep8, etc), нежели для самого сетапа.

memnek ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.