Уведомления

Группа в Telegram: @pythonsu

#1 Май 13, 2014 11:13:42

Pr_Alexey
Зарегистрирован: 2013-02-27
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Поставка готовых программ пользователю

Добрый день!
Я начинающий программист на Python 2.7 и у меня возник вопрос как передать пользователю свою программу. Пишу небольшие программы, которые работаю с БД - через FreeTDS: составляют отчеты, проверки делают, конвертируют из БД в файл и наоборот. Сам пишу на ОС Ubuntu (использую VIM, пробую PyCharm), а пользователь, чаще всего, работате на ОС Windows 7 или Windows Server 2008r2.
Хотелось бы передавать ему что из этого:
1. exe файл для запуска - скомпилированная программа со всеми библиотеками (как в С)
2. файл python который сам загрузить и установит необходимые модули (предполагается что Python уже установлен) и после уже можно запустить программу. Это более приемлимо, т.к. пользователь может захотеть внести небольшие изменения в саму py программу.
Нашел несколько инструкций в интернете, мало что понял. Может кто-нибудь поделится детальным описание действий или сказать где почитать?
На форуме я нашел такую тему за 2012г. - http://python.su/forum/topic/16202/?page=1#post-97395, но там говорится о ПО - pyinstaller, это хороший вариант?

Отредактировано Pr_Alexey (Май 13, 2014 12:28:46)

Офлайн

#2 Май 13, 2014 13:34:43

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Поставка готовых программ пользователю

Pr_Alexey
Смотрите в сторону cx_freeze



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Май 13, 2014 13:48:42

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Поставка готовых программ пользователю

Вариант №1 cx_Freeze
http://cx-freeze.readthedocs.org/en/latest/
Из всех сборщиков вроде py2exe, pyinstaller и т.п. наиболее поддерживаемый в настоящее время.
Способ применения: делаешь виртуалку с виндой, ставишь python и все необходимые пакеты + cx_Freeze, проверяешь, что программа твоя запускается и нормально работает. Пишешь файл описания для cx_Freeze, примерный шаблон:

#setup.py
import sys
from cx_Freeze import setup, Executable
icon_file = "user.ico"
buildOptions = dict(icon=icon_file)
base = None
if sys.platform == "win32":
    base = "Win32GUI"
setup(
        name="My Super Puper Program",
        version="1.1.1",
        author="Ivan Ivanov",
        author_email="ivan@host.com",
        url="http://host.com",
        description="Cheers!",
        options=dict(build_exe=buildOptions),
        executables=[Executable("main.py", base=base, icon=icon_file)])
Ключевая строка
  executables=[Executable("main.py", base=base, icon=icon_file)]) 
, где main.py - соответсвенно исполняемый файл.
Далее даешь команду
setup.py bdist_msi

Создается пакет-инсталятор msi .
Делаешь чистую виртуалку с виндой, пробуешь установить, если все хорошо - готово, если нет то скорее всего не хватает библиотек, например для Qt-приложения работающего с базой данных или графикой, требуется положить библиотеки в папку сборки и по новой собрать msi. В общем добиаешься чистой инсталяции и приемлемой работы.

Для правки msi-пакета, скорее всего потребуется orca, сейчас уже не помню, но что-то там с иконкой приложения было, необходимо было править таблицу msi. http://support.microsoft.com/kb/255905/ru

Вариант №2 Nuitka
http://nuitka.net/doc/user-manual.html

Cборка подобна первому варианту, только не нужен setup.py и собирается всё в один exe-файл, без инсталятора.
nuitka --recurse-all program.py
В данном python-код транслируется в C++ и позже компилируется.
Есть поддержка кросскомпиляции, но пока в зачаточном состоянии, в общем нужно много курить документации, чтобы из под linux скомпилировать под windows, проще виртуалку поднять.

Вариант №3 Cython
http://cython.org/ http://docs.cython.org/index.html

Тоже компилятор, но с оптимизациями, при определенных условиях может дать прирост производительности до 1000 раз,
from distutils.core import setup
from Cython.Build import cythonize
setup(
    ext_modules = cythonize("helloworld.pyx")
)
Компиляция:
python setup.py build_ext --inplace

Отредактировано Alen (Май 13, 2014 14:00:43)

Офлайн

#4 Май 13, 2014 20:33:19

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Поставка готовых программ пользователю

Alen
Вариант №3 Cython
Pr_Alexey
т.к. пользователь может захотеть внести небольшие изменения в саму py программу.
Ну надо еще вариант 0, который только и способен обеспечить этот функционал.
У пользователя установлен python (и в нем установлены setuptools или pip). Дальше в зависимости от доступности интернета.
При доступном интернете. Отдаете пользователю bat файл в котором написано:
easy_install you_pack_name
А сами регистрируете пакет. см например http://ishalyapin.ru/%D1%81%D0%BE%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D0%BC-%D0%BF%D0%B8%D1%82%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9-%D0%BF%D0%B0%D0%BA%D0%B5%D1%82-%D0%B8-%D0%B2%D1%8B%D0%BA%D0%BB%D0%B0%D0%B4%D1%8B/
Если интернета нет, а питон установлен , то делаете тоже самое только пользователю передаете дистрибутив сделанный при помощи distutils
https://docs.python.org/2/distutils/index.html#distutils-index
Если еще и питона нет, то отдаете дополнительно дистрибутив питона.

Мой опыт убеждает что это самый простой и весьма надежный способ распространения своих пакетов.



Отредактировано doza_and (Май 13, 2014 20:34:42)

Офлайн

#5 Май 14, 2014 07:43:29

Pr_Alexey
Зарегистрирован: 2013-02-27
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Поставка готовых программ пользователю

Спасибо всем за ответы, пока мне больше всего понравился совет doza_and, об использовании easy_install и bat файла. Я попробую его на практике, т.к. он выглядит просто и python у всех есть. К тому же, круг моих задач узкий, думаю у пользователя после установки 2-3 скриптов будут стоять все необходимые модули и задача еще больше упростится.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version