Сборка EMACS из исходников
Скачиваем пакет с исходным кодом с официального FTP проекта GNU:
wget ftp://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.xz
tar xf emacs-24.5.tar.xz
Для поиска более новой версии можно воспользоваться этой ссылкой:
Хорошо, распаковали, но EMACS'у нужна куча библиотек для успешной сборки. Можно поставить те, что нужны для сборки 24 версии, которая идёт в стандартной поставке Ubuntu 14.04:
apt-get install build-essentials -y && apt-get build-deb emacs24
После установки можно запустить .configure и make:
cd emacs-24.5/
./configure && make && make install
Процесс начнётся. Если проверка зависимостей пройдёт успешно, будет запущена компиляция проекта, а затем его установка. Однако, в главном меню не появится значка для запуска EMACS, как это происходит при установке через aptitude или apt-get install. Добавим его вручную. Всего лишь нужно создать файл формата .desktop в каталоге /usr/share/applications:
cd /usr/share/applications/
touch emacs.desktop
Теперь в этот файл нужно вписать следующие строки:
[Desktop Entry]
Version=24.5
Name=GNU Emacs
Type=Application
Comment=GNU Emacs text editor
Terminal=false
Icon=emacs
Categories=TextEditor;IDE
GenericName=GNU Text Editor
Exec=env UBUNTU_MENUPROXY=0 /usr/local/bin/emacs
После сохранения и перезапуска DE (можно выйти из системы и войти снова) ярлык появится в главном меню.
Сборка PIL с зависимостями (Debian 7)
Описание проблемы
Несмотря на то, что уже давно существует и активно развивается библиотека Pillow, импортирующая функции для обработки изображений средствами Python, в некоторых проектах до сих пор используется устаревший (последняя версия вышла в 2009 году) модуль PIL. Если Вы из тех "везунчиков", кому приходится поддерживать старые проекты, то эта статья для Вас. При установке PIL в виртуальное окружение вводится командаpip install pilПосле этого начинается процесс загрузки расширения и его сборки, выводится куча сообщений, и в самом конце можно увидеть следующий текст:
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.6.8 (unknown, Jan 26 2013, 14:35:25)
[GCC 4.7.2]
--------------------------------------------------------------------
*** TKINTER support not available (Tcl/Tk 8.5 libraries needed)
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
Что означает примерно следующее: модуль успешно собран, но работать не будет, т.к. ни одно из требующихся расширений установлено не было.
Немного погуглив, я натолкнулся на кучу форумов, где описывалось решение, заключающееся в создании символических ссылок на нужные библиотеки в каталоге /usr/lib, однако, ни одно из этих решений не оказалось рабочим. В этой статье я описываю своё решение сборки PIL с поддержкой практически всех нужных расширений.
Установка
Для сборки и установки PIL с зависимостями нам потребуются некоторые дополнительные пакеты- python2.6-dev - заголовочные файлы для сборки Python2.6. Если используете другой - указываете другой.
- libjpeg62-dev - для поддержки JPEG (в Debian есть также libjpeg8-dev, но она не подойдёт)
- zlib1g-dev - поддержка PNG
- libfreetype6-dev - поддержка шрифтов
- liblcms1-dev - поддержка LITTLE CMS. Что это такое, я не знаю, можно не ставить.
apt-get install libjpeg62-dev zlib1g-dev libfreetype6-dev liblcms1-devВсе необходимые зависимости, в том числе GCC, если он не установлен, установятся сами. Итак, необходимые системные пакеты установлены. Теперь нужно будет сделать несколько дополнительных действий с самой библиотекой. Первым делом её нужно скачать с официального сайта.
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gzРаспакуем архив:
tar xfv Imaging-1.1.7.tar.gzЗайдём в созданную папку и отредактируем файл setup.py
cd Imaging-1.1.7 nano setup.pyТут нужно внести следующие изменения:
TCL_ROOT = NONE JPEG_ROOT = NONE ZLIB_ROOT = NONE TIFF_ROOT = NONE FREETYPE_ROOT = NONE LCMS_ROOT = NONEзаменяем на
TCL_ROOT = '/usr/lib/x86_64-linux-gnu/' JPEG_ROOT = '/usr/lib/x86_64-linux-gnu/' ZLIB_ROOT = '/usr/lib/x86_64-linux-gnu/' TIFF_ROOT = '/usr/lib/x86_64-linux-gnu/' FREETYPE_ROOT = '/usr/lib/x86_64-linux-gnu/' LCMS_ROOT = '/usr/lib/x86_64-linux-gnu/'В x86-системах вместо x86_64 нужно вводить i386. Тем самым мы указываем, откуда брать библиотеки. Теперь можно попробовать собрать PIL со всеми расширениями (без реальной установки):
python setup.py build_ext -iЕсли сообщение выглядит примерно так:
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.6.8 (unknown, Jan 26 2013, 14:35:25)
[GCC 4.7.2]
--------------------------------------------------------------------
*** TKINTER support not available (Tcl/Tk 8.5 libraries needed)
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
можно смело устанавливать PIL в виртуальное окружение Вашего проекта. Перед этим рекомендую удалить старую версию через
pip uninstall pil -yи удалить файлы в каталоге lib/site-packages виртуального окружения:
cdsitepackages rm -rf PIL*Установка PIL:
python setup.py install
Заключение
В некоторых проектах БАРС Груп используется PIL, он прописан в зависимостях для установки их пакетов через setup-tools. В этом случае я делаю так:- Устанавливаю PIL
- Устанавливаю пакет, провожу миграции и т.д.
- Удаляю PIL и ставлю Pillow, т.к. Pillow импортирует те же самые функции и пространства имён, что и PIL.