Подтвердить что ты не робот

Какие инструменты сборки вы рекомендуете для python?

Я запускаю небольшой/средний проект python, вероятно, в Test Driven Development. Мои фоны больше в C и java, чем python (я использовал ant и makefile)

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

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

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

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


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

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

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

4b9b3361

Ответ 1

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

В последнее время я начал использовать Paver, что действительно здорово запускать тесты, создавать документацию с помощью Sphinx, но я использую только чистый Python. Если вы хотите увидеть, что возможно с помощью Paver, я настоятельно рекомендую эти 2 статьи: converting-from-make-to-paver и writing-technical-documentation от Doug Hellmann и вы определенно хотите проверить его файл pavement.py .

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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

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

Надеюсь, что это поможет Ура, Ale

Ответ 5

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

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

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

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

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

Короче говоря, если вы хотите автономный исполняемый файл без каких-либо зависимостей, единственный вариант - это просто перейти к C или С++.

Ответ 6

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