какой инструмент сборки вы рекомендуете для Python?[закрыто]

StackOverflow https://stackoverflow.com/questions/870516

Вопрос

Я начинаю небольшой/средний проект Python, вероятно, в разработке через тестирование.Мой опыт больше связан с C и Java, чем с Python (я использовал ant и makefile).

Я знаю, что в Python вам может не понадобиться инструмент сборки, но он мне понадобится, потому что я буду использовать cython и PyInstaller (эта штука должна работать на нескольких разных UNIX-системах, не завися напрямую от Python), и мне бы хотелось удобства выбора тестов из CLI, создания документации, возможно, проверки зависимостей и т. д.

Кто-нибудь жалуется, что в Python нет инструмента, похожего на make.Я знаю, что существует несколько инструментов, таких как обман и асфальтоукладчик, но мне бы хотелось услышать мнение реальных пользователей, а не только их веб-сайта.Кто-нибудь использует асфальтоукладчик?

А как насчет обычного файла setup.py, который поставляется со многими пакетами?Я просмотрел несколько, чтобы увидеть, есть ли у них общее использование, но не нашел ничего интересного (возможно, я использовал неправильные примеры).

Рекомендуете ли вы хотя бы для начала придерживаться того, что я уже знаю (ant и Makefile)?Если да, то какое расширение ant вы рекомендуете для Python (+cython+pyinstaller+pyUnit)?


РЕДАКТИРОВАТЬ:чтобы избежать дальнейших ответов, подобных ответу jwp, обратите внимание, что для этого проекта мне абсолютно необходимо, чтобы моя программа была автономным исполняемым файлом, потому что она абсолютно невозможный иметь виртуальную машину Python на целевой платформе, где будет запускаться исполняемый файл.У меня есть точно такое же аппаратное обеспечение для компиляции, так что, к счастью, мне не нужна кросс-компиляция (но я бы занимался разработкой на более дружественном Linux).

Я также хотел бы с самого начала проверить, компилируется ли мой код в Cython, не для преждевременной оптимизации, а просто для того, чтобы быть уверенным, что я не зайду слишком далеко с использованием несовместимых функций, которые потребовали бы болезненного рефакторинга, если бы Cython будет серьезно необходим.

Поэтому, пожалуйста, сосредоточьтесь на моем актуальном вопросе.

Это было полезно?

Решение

Ваши требования предполагают скорее Сконы который, согласно их веб-сайту, имеет больше контроля над различными строительными задачами, чем асфальтоукладчик.В последнем случае вам придется использовать много sh() который запускает обычные программы командной строки.

Недавно я начал использовать асфальтоукладчик что действительно здорово для запуска тестов и создания документации с помощью Сфинкс, но я использую только чистый Python.Если вы хотите узнать, на что способен Paver, я настоятельно рекомендую эти две статьи:переоборудование из бетоноукладчика в асфальтоукладчик и написание технической документации автор Дуг Хеллманн, и вам обязательно захочется проверить его pavement.py Файл конфигурации.

Другие советы

Если это вообще возможно, я бы посоветовал избегать модулей расширения (C/cython). в начале.Получите весь свой код, написанный на Python, используйте простой distutils на основе конфигурации, запустите тесты, используя -m (python -m mypkg.test.testall, или что-то еще;Импортировать unittest).

Как только вы приведёте свой проект в удобное состояние, начните выполнять некоторые оптимизации с помощью cython и дополнительного управления проектами, которое с этим связано.distutils может создавать модули расширения, поэтому я не уверен, что вам понадобится make/scons..

 project-dir/
  setup.py
  mypkg/
   __init__.py
   mymod.py
   test/
    __init__.py
    testall.py
    testsomething_specific.py

я использовал инструменты настройки для этого иногда в сочетании с Ant для более сложных задач или для интеграции с другими сборками.В целом мне это помогло, но я слышал, как некоторые люди в #python (freenode) жаловались на обычно низкое качество исходного кода этого пакета и рекомендовали стандарт диституты.

Если вы привыкли к Java (как и я), на что следует обратить внимание, это то, что Python не поддерживает разделенные пакеты.То есть вы не можете поместить site.db в src/site/db, site.view в src2/site/view, поместить src и src2 в PYTHONPATH и ожидать, что все будет работать.Это вызвало у меня большие головные боли с инструментами сборки, работало немного спорадически :)

Один из инструментов, который мне нравится, — virtualenv: http://pypi.python.org/pypi/virtualenv

с сайта:То, что он делает VirtualEnv, является инструментом для создания изолированных сред.Основная решаемая проблема — это проблемы зависимостей и версий, а также косвенно разрешений.Представьте, что у вас есть приложение, которому требуется версия 1 LibFoo, но другому приложению требуется версия 2.Как можно использовать оба этих приложения?Если вы установите все в /usr/lib/python2.4/site-packages (или в другое стандартное расположение вашей платформы), легко оказаться в ситуации, когда вы непреднамеренно обновите приложение, которое не должно обновляться.

Вы также можете попробовать: http://pypi.python.org/pypi/zc.buildout

с сайта:Проект Buildout обеспечивает поддержку создания приложений, особенно приложений Python.Он предоставляет инструменты для сборки приложений из нескольких частей, Python или других частей.Приложение может фактически содержать несколько программ, процессов и параметров конфигурации.

Пробовал пару раз, отлично подходит для развертывания сред разработки, возможно, это слишком много для ваших нужд.

Мне также говорили и читали в нескольких местах, что нос — очень крутой инструмент тестирования.http://somethingaboutorange.com/mrl/projects/nose/0.11.1/, я ищу немного свободного времени, чтобы попробовать.

Надеюсь, это поможет ура, эль

Чтобы избежать дальнейших ответов, подобных ответу jwp, обратите внимание, что для этого проекта мне абсолютно необходимо, чтобы моя программа была автономным исполняемым файлом, потому что абсолютно невозможно иметь виртуальную машину Python на целевой платформе, на которой будет запускаться исполняемый файл.У меня есть точно такое же аппаратное обеспечение для компиляции, так что, к счастью, мне не нужна кросс-компиляция (но я бы занимался разработкой на более дружественном Linux).

Я также хотел бы с самого начала проверить, компилируется ли мой код в Cython, не для преждевременной оптимизации, а просто для того, чтобы быть уверенным, что я не зайду слишком далеко с использованием несовместимых функций, которые потребовали бы болезненного рефакторинга, если бы Cython будет серьезно необходим.

Если все, что вам нужно, — это автономный исполняемый файл, вам не нужно запускать Cython.Для этого есть несколько хороших библиотек:

Однако для запуска кода Python вам просто нужно придется установить интерпретатор или виртуальную машину на целевую машину в той или иной форме или способом.Представленные мной решения включают просто встраивание интерпретатора для упрощения установки.На самом деле, я почти уверен (но могу ошибаться), что Cython не позволит вам создавать автономные исполняемые файлы.В основном он предназначен для создания расширений интерпретатора Python.

Однако есть еще пара альтернатив.Если на целевой машине есть интерпретатор Java, вы можете запустить Джитон.Также есть ЖелезоПитон для .net.Однако вам все равно придется распространять среды выполнения для этих языков вместе с вашим проектом.

Короче говоря, если вам нужен автономный исполняемый файл без зависимостей, ваш единственный вариант — использовать чистый C или C++.

Если вы ищете простой инструмент сборки на основе Python.Проверить пинт.Задачи в пинт это просто (украшенная) функция Python.Он также поддерживает передачу параметров стиля Rake задачам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top