Пользовательские команды distutils

Мог попытаться использовать awk:

<command> | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush(); }'

Вы, возможно, должны удостовериться это <command> продолжает буферизованный вывод линии, т.е. он сбрасывает свой поток вывода после каждой строки; метка времени awk добавляет будет время, когда конец строки появился на ее входном канале.

Если awk показывает ошибки, то попробуйте gawk вместо этого.

24
задан dave paola 10 November 2009 в 20:08
поделиться

4 ответа

Конечно, вы можете расширить distutils с помощью новых команд. В файле конфигурации distutil добавьте:

 [global]
 command-packages=foo.bar

это может быть в distutils.cfg в самом пакете distutils , .. pydistutils.cfg в вашем доме каталог (без начальной точки в Windows) или setup.cfg в текущем каталоге.

Затем вам понадобится пакет foo.bar в каталоге пакетов вашего сайта Python.

Затем в этом пакете вы добавляете классы, реализующие ваши новые желаемые команды, такие как stage , подклассы distutils.cmd - документация слабая, но есть много примеров, поскольку все существующие команды distutils являются тоже построили таким образом.

13
ответ дан 28 November 2019 в 22:26
поделиться

Это можно легко сделать с помощью distutils, создав подкласс distutils.core.Command внутри setup.py.

Например:

from distutils.core import setup, Command
import os, sys

class CleanCommand(Command):
    description = "custom clean command that forcefully removes dist/build directories"
    user_options = []
    def initialize_options(self):
        self.cwd = None
    def finalize_options(self):
        self.cwd = os.getcwd()
    def run(self):
        assert os.getcwd() == self.cwd, 'Must be in package root: %s' % self.cwd
        os.system('rm -rf ./build ./dist')  

Чтобы включить команду you должен ссылаться на него в setup ():

setup(
     # stuff omitted for conciseness.
     cmdclass={
        'clean': CleanCommand
}

Обратите внимание, что вы также можете переопределить встроенные команды таким образом, например, что я сделал с 'clean'. (Мне не понравилось, как встроенная версия оставила после себя каталоги dist и build.)

% python setup.py --help-commands | grep clean
  clean            custom clean command that forcefully removes dist/build dirs.

Используется ряд соглашений:

  • Вы указываете любые аргументы командной строки с помощью user_options .
  • Вы объявляете любые переменные, которые вы будете использовать, с методом initialize_options () , который вызывается после инициализации для настройки вашего пользовательского пространства имен для подкласса.
  • Метод finalize_options () вызывается непосредственно перед run () .
  • Сама команда будет реализована в run () , поэтому перед этим обязательно выполните любую другую подготовительную работу.

Лучший пример для использования - это просто посмотреть исходный код для одна из команд по умолчанию, находящихся в PYTHON_DIR / distutils / command , например install.py или build.py .

52
ответ дан 28 November 2019 в 22:26
поделиться

Если вы хотите использовать несколько версий, то может помочь virtualenv с virtualenvwrapper .

5
ответ дан 28 November 2019 в 22:26
поделиться

См. ответ Алекса , если вам нужен способ сделать это с помощью distutils, но я считаю, что Paver лучше для такого рода вещей. Это значительно упрощает создание пользовательских команд или переопределение существующих. К тому же переход не так уж и сложен, если вы привыкли к distutils или setuptools.

3
ответ дан 28 November 2019 в 22:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: