Для простого приложения командной строки в Mac OS X вам не нужно упаковывать его как пакет приложений OS X, что и делают py2app
и устаревшие BundleBuilder
.И комплект приложений не является обычным способом доступа к утилите командной строки, так как пользователь должен будет «достучаться» и выполнить что-то внутри комплекта.Если в вашем приложении нет сторонних зависимостей библиотеки C, самый простой способ - это упаковать его как стандартный дистрибутив Distutils с setup.py
.Поскольку Apple поставляет версии Python и setuptools
в последних выпусках OS X, если вы загрузили свое приложение в Индекс пакетов Python, PyPI , пользователь может загрузить и установить приложение с помощью одной команды в окне терминала.:
sudo easy_install your_app_name
По умолчанию скрипт будет установлен в /usr/local/bin
, который включен в PATH
по умолчанию для оболочек пользователей OS X.Если вы не хотите загружать его в PyPI
, вы все равно можете использовать easy_install
для установки из загруженного файла или с URL-адреса.Вам также необходимо принять во внимание любые зависимости версий Python и то, какие Pythons Apple делает доступными с выпусками OS X, которые вы намереваетесь поддерживать.Существуют зависящие от версии команды easy_install-2.x
.
Кроме того, поскольку Distutils и инструменты более высокого уровня, которые его используют (pip
, Distribute
, setuptools
и др.), Являются кроссплатформенными, выможет не потребоваться что-либо делать для поддержки установки в большинстве других дистрибутивов Unix-y.
С другой стороны, если ваше приложение имеет зависимые от версии Python зависимости или имеет сторонние библиотечные зависимости, и вам необходимо поддерживать несколькоВерсии OS X такие, что вы не можете использовать Python, поставляемый Apple, тогда может быть лучше использовать py2app
и связать специфичную для приложения копию Python.В этом случае, возможно, пользователь мог бы дважды щелкнуть по загруженному комплекту приложений, чтобы запустить скрипт для аутентификации и создать символическую ссылку из /usr/local/bin
на соответствующий файл скрипта внутри комплекта приложений.Это имеет тот недостаток, что делает путь к пакету приложения зависимым.Есть и другие, более сложные способы сделать что-то подобное без этого ограничения, если это необходимо.