LINUX.ORG.RU

Cmake, сборка скрипта на питоне

 , , , ,


0

1

Есть простая утилитка на питоне. Весь проект состоит из одного скрипта на питоне, иконки и .desktop файла. Скрипт зависит от пары модулей, также требуется наличие кед.

Хочется создать deb пакет и вообще разместить утилиту на Ланчпаде (вроде, туда можно загружать только исходники, пакеты уже собираются там автоматически).

Для себя я с питоновским скриптом поступил так:

python -OO -m compileall myscript.py
sudo cp myscript.pyo /usr/local/bin/myscript
sudo chmod 775 /usr/local/bin/myscript
А как сделать то же самое с помощью cmake? Или можно вообще обойтись без cmake и эти команды можно выполнить в debian/rules в секции build? Ланчпад это позволит?

С остальными статичными файлами вроде бы понятно как поступить.

Ответ на: комментарий от tailgunner

Оно ведь для создания пакетов с модулями питона? По-моему, в данном случае оно не подходит для моей задачи, т.к. у меня пакет для KDE (интеграция в контекстное меню, например).

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

Оно ведь для создания пакетов с модулями питона?

Оно для пакетирования программ на Python.

у меня пакет для KDE

У тебя пакет на Python.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Не нравится оно мне. Слишком громоздко для простенького скрипта вообще похоже не делает то что я хочу.

firestarter ★★★☆
() автор топика
Последнее исправление: firestarter (всего исправлений: 1)

в debian/install прописать пути, куда файлы будут устанавливаться, в postinst - компиляцию при установке, в prerm - удаление байт-кода. Никакого cmake не надо, debian/rules оставить дефолтный

Excavator
()
Ответ на: комментарий от Excavator

в debian/install прописать пути, куда файлы будут устанавливаться, в postinst - компиляцию при установке,

Хм, хорошая идея. То есть я могу установить myscript.py в /tmp, скомпилировать байткод и переместить его в /usr/bin и удалить /tmp/myscript.py тем же postinst?

firestarter ★★★☆
() автор топика
Последнее исправление: firestarter (всего исправлений: 1)
Ответ на: комментарий от Excavator

только не в /tmp, и удалять не надо, это будет неправильно. Куда-нибудь в /usr/share

Ну да, иначе при удалении пакета будет ошибка, т.к. пакетный менеджер будет пытаться удалить этот файл.

Немного странновато конечно. Зачем включать исходный код в пакет, если для этого существует отдельный пакет с исходником?

firestarter ★★★☆
() автор топика

Я для Пандоры на ruby сделал так.

1. Создаешь папку, например deb с содержимым:

/DEBIAN
/opt
/usr

/opt и /usr заполняешь как хочешь. Это встанет относительно / на новой машине.

2. Создаешь файл /DEBIAN/control, заполняешь примерно так:

Package: pandora-net
Version: 0.10-1
Architecture: all
Maintainer: Mister Iks <secret@mail.ru>
Installed-Size: 956
Depends: ruby, ruby-sqlite3, ruby-gtk2, ruby-gstreamer, openssl
Suggests: gstreamer0.10-ffmpeg, gstreamer0.10-x, gstreamer0.10-plugins-good, gstreamer0.10-plugins-bad
Section: net
Priority: optional
Bugs: https://github.com/Novator/Pandora/issues
Homepage: http://robux.biz/pandora.html
Description: Pandora is a free multiplatform distributed (p2p) information system.
 Pandora includes functions of social network, instant messanger, audio and
 video chat, commercial system, distributed development system, file exchange and vote system.
 Pandora uses cryptography and trust networks.

3. Делаешь примитивный скрипт по сборке:

#!/bin/sh

fakeroot dpkg-deb --build -v ./deb pandora-net_0.1-1precise2_all.deb

???!
ПРОФИТ!!! :-)

p.s. И да кстати, результат выкладываю на SF:
http://sourceforge.net/projects/pandora-net/files/

Novator ★★★★★
()

Кстати, а подскажите пожалуйста по cmake ещё, почему не работает такая команда?

add_custom_command(OUTPUT custom_command_output.txt COMMAND echo "cmake echo output qwerty" > "${CMAKE_CURRENT_BINARY_DIR}/custom_command_output.txt")

firestarter ★★★☆
() автор топика
Ответ на: комментарий от Reset

Потому что '>' это специфика bash'а.

Допустим, но это тоже не работает и также никаких ошибок не выводит:

add_custom_command(OUTPUT custom-command-touch COMMAND /usr/bin/touch "${CMAKE_CURRENT_BINARY_DIR}/custom-command-touch")

firestarter ★★★☆
() автор топика
Ответ на: комментарий от Reset

А вот так работает:

add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/custom_command_output.txt" COMMAND echo "cmake echo output qwerty" > "${CMAKE_CURRENT_BINARY_DIR}/custom_command_output.txt")
add_custom_target(custom_command_output_txt ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/custom_command_output.txt")

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

Да, чтобы custom command выполнялась её output должен быть в списке зависимостей какой-то цели. Неправильно питоновскую программу собирать с помощью cmake. cmake заточен исключительно под си,си++,фортран остальное им собирать страшный геморрой

Reset ★★★★★
()
Ответ на: комментарий от Reset

остальное им собирать страшный геморрой

Ну, не такой уж и геморой в принципе:

add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/myexecutable" COMMAND sh "${CMAKE_CURRENT_SOURCE_DIR}/src/compilepy.sh" "${CMAKE_CURRENT_SOURCE_DIR}/src/myexecutable.py" "${CMAKE_CURRENT_BINARY_DIR}/myexecutable")
add_custom_target(imageshack.us.bin ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/myexecutable")
и compilepy.sh:
#!/bin/bash
python2.7 -OO -m compileall $1
mv ${1}o $2

firestarter ★★★☆
() автор топика

Ещё вопрос по cmake.
Допустим, я с помощью add_custom_command генерирую несколько изображений с помощью imagemagick (есть одна картинка, нужно сгененировать несколько копий с разным разрешением).
Как правильно указать что для сборки пакета из исходников требуется imagemagick, но для самого пакета с бинарём он не требуется? Будет ли такое работать на ланчпаде?

firestarter ★★★☆
() автор топика

distutils! За использование CMake или autocrap для установки пайтоновских программ хочется ломать пальцы, тем кто так сделал.

fat_angel ★★★★★
()
Ответ на: комментарий от firestarter

Слишком громоздко для простенького скрипта

Один вызов dh_* громоздок?

вообще похоже не делает то что я хочу.

Разберись. Если ты хочешь включить пакет в Убунту, придется соблюдать правила.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Разберись. Если ты хочешь включить пакет в Убунту, придется соблюдать правила.

Эти правила какие-то упоротые. Их огромное количество, видимо накапливались веками. Программу написать проще блин чем пакет собрать соблюдая все эти правила. Неудивительно что проприетарщики неохотно разрабатывают под Линуксы...

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

Программу написать проще блин чем пакет собрать ... Неудивительно что проприетарщики

Действительно, ведь там сплошь hello-world-ы, и поголовно используется дистрибутивная система установки.

anonymous
()
Ответ на: комментарий от tailgunner

Вангую, что подгонялась задача под инструмент (а не как положено) и тс хотел попробовать cmake.

anonymous
()

Дошли руки доделать эту бредовую идею. В итоге получилось таки собрать на Ланчпаде пакет. Забавно что нельзя использовать в скриптах wget (пытался им получать иконку с Википедии чтобы не хранить её в исходниках), он выдавал ошибку что не может ресолвить хост.
Также пришлось для файла png использовать костыль с uuencode/uudecode, т.к. формат исходников 1.0 не позволяет хранить бинарные файлы, а с 3.0 у меня не получилось, разбираться с ним было лень, может потом как нибудь :D

Кому интересно, исходники тут, пакет тут. Всем спасибо за помощь.

firestarter ★★★☆
() автор топика
Последнее исправление: firestarter (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.