- MAMP своими руками — собираем Apache под Mac OS X
- Настраиваем окружение на Mac OS и собираем автономное приложение с PySide/PyQt
- Подготовка
- XCode
- MacPorts
- Python
- virtualenv
- PySide
- Настройка окружения
- Создаем виртуальное окружение
- py2app и проверка боем
- py2app
- Platypus и Packages. Создаём и устанавливаем программы на macOS
MAMP своими руками — собираем Apache под Mac OS X
Этот хабратопик будет из серии о том, как своими руками организовать MAMP (Mac OS X + Apache + MySQL + PHP) под Mac OS X.
Начнем с обновления Apache 2.
Думаю пользователям Mac OS X Leopard известно, что Apache (версии 2, начиная с 10.5.2) и так поставляется в комплекте с операционной системой. Но это совсем не означает, что умение самостоятельно обновить свой Apache бесполезен.
Примечание: для того, чтобы у вас все получилось, нужно установить Developer Tools
Поскольку организация файлов и т.п. на Mac OS отличается от принятых в остальных Unix системах (равняюсь на них из-за того, что работать мы будем через терминал) и расположение файлов того же предустановленного Apache отличается от стандартного, я буду давать инструкции по именно обновлению веб-сервера, без создания его лишних копий и с сохранением функции управления оным через Sharing в System Preferences.
Итак, приступим. Для начала скачаем пследнюю версию исходников Apache (на момент написания хабратопика — 2.2.8) — тут (уточню, нам нужны Unix Source — вот прямая ссылка).
Распакуем оную куда-нибудь в сохранное место (замечу, что удалять мы эти сорцы не будем — наоборот, они буду лежать у нас для последующего добавления компонентов наименьшими усилиями — при таковой надобности).
Открываем Terminal (папка Utilities в Applications). Тулим к той папки коммандой, допустим она лежит в папке src, в домашней папке юзера:
cd
В этой папке открываем config.layout и дописываем в конец следующее:
prefix: /usr
exec_prefix: $
sbindir: $
libdir: $
libexecdir: $
mandir: $
sysconfdir: /etc+
datadir: /Library/Webserver
installbuilddir: $
errordir: $
iconsdir: $
htdocsdir: $
manualdir: $
cgidir: $
includedir: $
localstatedir: /var
runtimedir: $
logfiledir: $
proxycachedir: $
Это — схема расположения файлов веб-сервера на нашей машинке. Она четко повторяет схему расположения родного Apache, который устанавливается системой Leopard.
Далее создадим тут же файлик conf.args:
./configure \
—enable-layout=Leopard \
—enable-mods-shared=all \
—with-mpm=prefork \
—disable-static \
—disable-unique-id \
—disable-ipv6 \
—enable-dav \
—enable-cache \
—enable-proxy \
—enable-shared \
—enable-logio \
—enable-deflate \
—with-included-apr \
—enable-cgi \
—enable-cgid \
—enable-suexec
Это конфигурационная команда, которая приготовит сорцы к компиляции под вашу систему и определит схему расположения файлов (—enable-layout=Leopard). Кроме того там указаны дополнительные настройки, которые использую локально лично я. Если вам надо еще что-то или чего-то не надо — редактированию подлежит.
В файлик мы ее положили, чтобы, когда что-то надо будет дополнить или изменить — был предыдущий вариант конфигурации.
Все, что осталось сделать, это выполнить кофигурационную команду — копируем ее целиком из файла, вставляем в консоль и жмем энтер. Пройдет некоторое время и команда завершит отработку.
Далее выполняем:
make
Ждем, а после:
sudo make install
В общем-то, сервер обновлен. 🙂 Позднее добавлю как его в автозагрузку добавить.
И еще, я часто упоминал, что в последующем можно будет удалять или добавлять компоненты — делается это просто. На те же сорцы применяем .configure с новыми параметрами, потом make и sudo make install. Преимущество того, что вы делать это будете еще раз на те же сорцы в том, что конфигурация и make будет происходить значительно быстрее.
Источник
Настраиваем окружение на Mac OS и собираем автономное приложение с PySide/PyQt
Сейчас все удобнее становится использовать HTML и JavaScript в интерфейсах приложений. И именно такая задача недавно появилась передо мной, с одним важным условием — на выходе должно быть полностью standalone приложение, не требующее установки дополнительных библиотек и способное запуститься в обычном пользовательском окружения.
В силу своего природного обаяния в качестве основного языка был выбран Python + PySide c WebKit на борту, для сборки app-бандла использовался py2app.
Проблемы появились, при первой же попытке запустить приложение на чистой системе — обнаружилось большое количество внешних зависимостей, которые py2app не смог самостоятельно разрешить. Под катом пошаговая инструкция как эта проблема была решена.
В попытках понять почему py2app не включает в бандл все необходимые библиотеки, в одной статье была найдена мысль, что создание полностью автономного приложения с встроенным в Mac OS интерпретатором невозможно и нужно пользовать MacPort. Так и поступим.
Подготовка
XCode
Несет в себе как средства разработки под Mac OS, так и нужный нам gcc.
Я использовал последнюю версию — 4.2, но и с более ранними (3.Х) проблем быть не должно.
Если еще нет, то брать с установочных дисков Mac OS или с сайта Apple (потребуется бесплатная регистрация)
MacPorts
Менеджер пакетов, который позволяет ставить на мак много полезных тулов и библиотек.
Устанавливается стандартным способом (pkg). Брать с MacPorts.org.
После установки можно на всякий случай обновить:
$ sudo port selfupdate
Python
Ставим из MacPorts:
$ sudo port install python27
Если используете другую версию питона, просто замените здесь и далее.
virtualenv
Тул, позволяющий создавать изолированные окружения для питона. Очень удобно, когда нужно иметь несколько версий питона или разные проекты требуют различных библиотек, упрощает дальнейший деплоймент. В нашем случае мы с помощью virtualenv создадим «автономную песочницу» из которой и появится standalone приложение.
$ sudo easy_install virtualenv
В нагрузку ставим virtualenvwrapper, который упрощает работу с окружением:
$ sudo easy_install virtualenvwrapper
PySide
Библиотека для Python, позволяющая использовать всю мощь и силу Qt из привычного языка программирования.
Пытался установить PySide сразу в виртуальное окружение через pip или easy_install (что было бы логичнее), но выяснилось, что PySide не поставляется в необходимом для этих менеджеров пакетов виде, в результате чего куча времени была убита на попытки скомпилировать библиотеку… остановился через пару дней, когда поймал себя за тем, что сидел и правил исходники какой-то сторонней либы =)
В результате идем путем установки предоставляемого разработчиками пекеджа.
Настройка окружения
Подготовительная часть на этом закончена, переходим непосредственно к созданию виртуального окружения и его наполнению.
Создаем виртуальное окружение
/.bash_profile добавляем
export WORKON_HOME=
/Envs
source /usr/local/bin/virtualenvwrapper.sh
/.bash_profile
$ mkdir -p $WORKON_HOME
$ mkvirtualenv —no-site-packages —python=/opt/local/bin/python2.7 py27
# —no-site-packages — говорит, что виртуальное окружение не будет использовать системные пекеджи
# —python=/opt/local/bin/python2.7 — какой интерпретор будет использоваться
# py27 — название окружения
После этого в $WORKON_HOME/py27 будет создана базовая структура каталогов и необходимые файлы. Кроме того окружение станет активным, в начале командной строки появится (py27). В дальнейшем, для активации нужно будет выполнить
$ workon py27
Можно вызвать питон, убедиться, что запустилась правильная версия.
(py27) $ python
Python 2.7.2 (default, Jul 21 2011, 01:27:20)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type «help», «copyright», «credits» or «license» for more information.
>>>
Теперь нужно перенести в новое окружение все библиотеки и модули:
# PySide packages
$ cd /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
$ mv PySide/
/Envs/py27/lib/python2.7/site-packages/
$ mv pysideuic/
# PySide libs
$ cd /usr/lib/
$ sudo mv libpyside-python2.7.*
# Необходимая для PySide библиотека
$ sudo mv libshiboken-python2.7.*
# Qt4 libs
$ cd /Library/Frameworks/
$ cp -pR Qt*
/Envs/py27/lib/
$ cp -pR phonon.framework
/Envs/py27/lib/ #Обратите внимание на отсутствие слеша после framework!
# Остатки Qt нам не нужны, удаляем
$ sudo /Developer/Tools/uninstall-qt.py
Так, почти все готово, осталась финальная полировка и проверка.
virtualenvwrapper кроме удобного способа создания и активации окружений предоставляет хуки на различные события — preactivate, postactivate, predeactivate, postdeactivate и прочие (полный список). Нас сейчас интересует postactivate, в который мы добавим переменные, которые будут говорить где искать в нашем окружении библиотеки и разные модули.
$ vi
/Envs/py27/bin/postactivate
# Добавляем туда
export DYLD_FRAMEWORK_PATH=
/Envs/py27/lib/
export DYLD_LIBRARY_PATH=
Быстрая проверка:
$ workon py27
(py27) $ python
Python 2.7.2 (default, Jul 21 2011, 01:27:20)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type «help», «copyright», «credits» or «license» for more information.
>>> import PySide
>>> PySide
>>>
Если вы все сделали правильно — то результат должен быть примерно таким. Если словили кучу ошибок, то… возможны варианты 🙂
py2app и проверка боем
Теперь все готово к написанию тестового приложения — qt_test.py:
#!/usr/bin/env python
import sys
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtWebKit import *
web = QWebView()
web.load(QUrl(«http://www.pyside.org/»))
web.show()
Проверяем
$ workon py27
(py27) $ python qt_test.py
py2app
Пришла очередь py2app, который поможет собрать наше приложение в полноценный бандл. Кроме прочего разработчики virtualenv заботливо положили в наше виртуальное окружение еще один менеджер пакетов pip, с помощью которого мы и поставим py2app:
$ workon py27
(py27) $ pip install py2app
Для генерации бандла py2app использует специальный файл — setup.py. Как его создать с нуля хорошо рассказано в доке, а мы воспользуемся уже готовым:
В папочке dist появится app-бандл, который вы непременно можете запустить! )
Весь алгоритм проверялся на Mac OS X 10.6.8, а получившийся бандл тестировался на такой же, но чистой системе.
Источник
Platypus и Packages. Создаём и устанавливаем программы на macOS
Очень часто бывает необходимо собрать код, написанный на Python, в приложение для Windows, Linux или OS X. Да, для этого действительно существует множество пакетов, таких как кросс-платформенные cx_Freeze и PyInstaller, а также обособленных py2exe и py2app. Но для macOS существует возможность избежать возни с созданием установочного файла.
Нужно сказать, что в отличии от Windows, программа на MacOS это просто папка, с расширением .app а вот исталлятор имеет расширение .pkg.
Создаём программу
Для создания программы из скрипта, используем программу Platypus. Это бесплатная, open-source программа, распространяемая под BSD лицензией. Вот так выглядит единственное главное окно этой программы:
- В поле App Name указываем имя приложения, это то как программа будет отображаться в списке программ и Launchpad-е.
- В выпадающем списке Script Type указывается язык скрипта, в нашем случае это Python, можно указать путь к компилятору, если, например, на компьютере их несколько.
- В поле Script Path можно создать свой новый скрипт (кнопка «+ New»), а можно выбрать уже готовый скрипт (кнопка «Select Script»).
- В выпадающем списке Interface можно выбрать тип приложения, в случае если у вас консольное приложение, не требующее ввода текста пользователем, рекомендую выбрать Text Window.
- Слева от вышеперечисленных полей, есть поле выбора иконки приложения, в составе программы идёт несколько стандартных иконок, но можно выбрать свою.
- Следующий блок полей отвечает за информацию о программе, которая предоставляется в стандартном меню «О программе». Это уникальный идентификатор, автор программы и её версия. Кроме этого можно указать свойства для запуска, например запуск с правами администратора или работа в бэкграунде.
- И второй по важности блок, это дополнительные файлы. Так как в MacOS приложение — это не только исполняемый файл, но и все необходимые для работы приложения файлы и папки. Нажатием на кнопку «+» можно выбрать как и отдельные файлы, так и целые папки.
- После заполнения всех полей, кнопка «Create App» становится активной, нажимаем её и получаем на выходе симпатичный файлик с расширением .app.
Мы собрали приложение, которое запуститься на любом компьютере под управлением macOS, но этого не достаточно для удобного распространения и установки конечным пользователем. Поэтому создадим для нашего приложения установочный пакет.
Создаём инсталлятор
Для создания установочных пакетов существует несколько программ, мы будем использовать Packages.
При открытии программы Packages нам предлагается выбрать тип установочного пакета, выбираем Distibution, так как Raw Package необходим тогда, когда нужно установить файлы в нестандартное расположение.
В следующем окне выбираем имя и расположение проекта. Имеет смысл в качестве расположения указывать рабочую папку проекта. После создания проекта открывается следующее окно, с большим количеством вкладок.
Пробежимся по ним:
- Settings — первая вкладка, здесь можно задать имя приложения, рабочую директорию, а так же необходимые условия для установки.
- Presentations — на этой вкладке устанавливается внешний вид самого пакета установки, добавляются переводы на различные языки, путь установки и прочие нюансы.
- Requirements & Resources — необходимые условия для установки и зависимости. Например если для работы программы необходимо Xcode Command Line Tools, то здесь это можно указать, и если проверка не будет пройдена, то установка отмениться.
- Comments — вкладка исключительно для заметок разработчика, представляет собой огромное поле для ввода текста.
Если в боковом меню выделить необходимый нам пакет(на картинке это My), то мы увидим следующую картину:
Во вкладке Settings, выбирается идентификатор, версия и можно указать, что попросить сделать пользователя после установки (выключить компьютер, перегрузиться и завершить сеанс пользователя). Кроме этого можно выбрать Location и дополнительные опции, например ввод админского пароля, изменение прав доступа к папке и прочее.
Во вкладке Payload происходит основной процесс, добавление файла приложения в проект. Необходимо выделить нужную папку для установки приложения, например Applications, нажать на кнопку «+» и выбрать уже готовый файл с расширением .app.
Во вкладке Scripts можно выбрать скрипты которые запустятся до или после установки.
После того как все пункты выполнены, нужно собрать проект. Это можно сделать либо из меню Build —> Build либо с помощью специальной короткой команды ⌘B.
После этого вы получите установочный файл, которым можете поделиться с вашими друзьями и партнёрами.
Ссылки на необходимые файлы и обучающее видео
Platypus — программа для сборки .app;
Packages — программа для сбоки pkg;
Вот это — отличная видеоинструкция по работе с программой Packages.
Небольшое дополнение
По умолчанию, Platypus просто запускает скрипт, но почти всегда нам надо запускать программу на компьютере, где не установлен python. Для такого случая есть специальный лайфхак:
В Platypus в качестве типа скрипта выбираете shell script, нажимаете на + и пишете следующий код:
Где
- MyApp.app — это имя вашего приложения
- /compiler/bin/python — путь до компилятора
- main.py — необходимый скрипт
Теперь, если вы соберёте программу и переместите её в папку Applications, то она запустится со своим компилятором.
Источник