Объяснение проекта Python - PullRequest
2 голосов
/ 12 декабря 2011

это может быть тема "again-python-project", но мне интересно, как создать проект, например, простую игру, в которой будет установлен установщик, чтобы пользователь мог просто выполнить двойной клик и установить работающую игрув какой-то директории (уточняется позже).Я искал setup.py, distutils, easy_install и pip, но проекты mu говорят, что установка в / home / user / install_dir не в env.variable PYTHONPATH, который я изменил в python sys.path ... Я простоспрашиваю, как я строю свой проект, так что это:

  1. упорядочено в dirs
  2. устанавливается пользователем
  3. включает в себя все необходимые библиотеки (что, я думаю, является единственным рабочим вариантомиз моего setup.py-es)
  4. пользователь не может быть удален. Для получения дополнительной информации - я читал «Изучите Python Зеда Шоу: трудный путь», и в его главе, посвященной созданию каркаса проекта, ни один из его шагов не работал,Помимо тестов на носу, я протестировал и с py2 и с py3.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

В GNU / Linux стандартный способ установки программного обеспечения - через репозитории . Это то, как вы получаете автоматическое обновление и установку зависимостей, и это путь, которым вы, вероятно, должны идти.

Иногда вы можете найти «двоичные пакеты», такие как mypackage.deb или mypackage.rpm, которые будут установлены двойным щелчком по ним. Однако эти пакеты, как правило, представляют собой то же самое, что вы бы поместили в репозиторий, поэтому их подготовка примерно такая же, но вы потеряете вкусности, которые идут с репозиториями.

Упаковка в GNU / Linux ближе к искусству, чем к науке, поскольку каждый из основных дистрибутивов гордится разработкой собственного менеджера пакетов, и все они сильно отличаются друг от друга. Если вы находитесь под Ubuntu, и ваше программное обеспечение будет бесплатным (как в «свободе слова»), вы можете воспользоваться обширной документацией и их свободно доступными PPA [своего рода "мини-хранилища"].

Python - как вы уже обнаружили - предлагает альтернативный «менеджер пакетов», основанный на PyPI (индекс пакетов Python), но использовать его в системах * nix обычно не рекомендуется, так как пакеты, установленные через PyPI, не знают о уже существующих в вашей системе через главный менеджер пакетов, так что вы, вероятно, в конечном итоге получите дубликаты пакетов или разные версии одних и тех же пакетов.

Еще хуже с точки зрения дизайна является PyInstaller , который создает большие исполняемые файлы (позже сжатые), включая все , которое потребуется вашему программному обеспечению для запуска. Несмотря на название, PyInstaller не является установщиком. Он просто создает огромные исполняемые файлы. С их FAQ :

Несмотря на свое название (которое больше связано с его историческими корнями), PyInstaller используется для преобразования программы Python в собственную исполняемую форму, которая не требует запуска существующих установок Python. Создание программы установки полностью выходит за рамки PyInstaller.

Теперь, что касается ваших требований:

заказано в dirs

Все менеджеры пакетов будут делать это автоматически. Целевые каталоги зависят от целевой системы, хотя (то есть: вы никогда не жестко программируете местоположение каталогов ваших исходных файлов, это система, которая решает, где их хранить).

PyInstaller, конечно, не будет делать ничего подобного.

устанавливается пользователем

В системах GNU / Linux это невозможно сделать, если у пользователя нет привилегий root [независимо от того, был ли пакет извлечен из репозитория или является двоичным файлом, поскольку блокирующей частью является то, что пользователь не имеет разрешения на запись в общесистемные каталоги ]. Самое близкое, что вы можете сделать, это чтобы пользователь создал дерево каталогов в своей домашней папке (например, в ~/.local и поместил туда ваши исходные файлы. Это работает довольно хорошо, если система уже имеет необходимые зависимости, но если ваш источник говорит зависит от C lib, который не установлен, вам не повезло.

включает в себя все необходимые библиотеки (я думаю, это единственный рабочий вариант из моих setup.py-es)

Это одна из основных функций менеджера пакетов (deb, rpm, yum ...). PyPI сможет извлекать зависимости python для вашей программы, но не сможет извлекать двоичные зависимости [поэтому, если ваша зависимость, например, является привязкой для библиотеки C, вы получите привязка, но вы должны получить в другом месте библиотеки C].

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

0 голосов
/ 12 декабря 2011

Если я понимаю ваш вопрос, вам нужен способ распространения проекта Python и всех его зависимостей. Вы уже пробовали PyInstaller . Это позволяет вам «заморозить» ваши (и все необходимые) модули Python в одном исполняемом файле. Он также предоставляет механизмы для настройки среды по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...