Найти - Пользователи
Полная версия: Поставка готовых программ пользователю
Начало » Python для новичков » Поставка готовых программ пользователю
1
Pr_Alexey
Добрый день!
Я начинающий программист на 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, это хороший вариант?
JOHN_16
Pr_Alexey
Смотрите в сторону cx_freeze
Alen
Вариант №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
doza_and
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
Если еще и питона нет, то отдаете дополнительно дистрибутив питона.

Мой опыт убеждает что это самый простой и весьма надежный способ распространения своих пакетов.
Pr_Alexey
Спасибо всем за ответы, пока мне больше всего понравился совет doza_and, об использовании easy_install и bat файла. Я попробую его на практике, т.к. он выглядит просто и python у всех есть. К тому же, круг моих задач узкий, думаю у пользователя после установки 2-3 скриптов будут стоять все необходимые модули и задача еще больше упростится.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB