Надежный способ убедиться, что другие люди могут запускать мою программу python - PullRequest
17 голосов
/ 30 марта 2020

Я хочу sh разместить программу python на GitHub и попросить других людей загрузить и запустить ее на своих компьютерах с различными операционными системами. Я относительно новичок в python, но использовал его достаточно, чтобы заметить, что получение разных версий всех включенных модулей для совместной работы может быть проблематичным c. Я только что обнаружил использование requirements.txt (сгенерированного с pipreqs и развернутого с помощью команды pip install -r /path/to/requirements.txt), но был очень удивлен, заметив, что requirements.txt на самом деле не указывает, какая версия python используется, так что очевидно, что это не полное решение само по себе. Поэтому мой вопрос: какой набор спецификаций / файлов / чего-то еще необходим для того, чтобы кто-то, кто загружает мой проект, действительно мог запустить его с наименьшим количеством возможных проблем.

РЕДАКТИРОВАТЬ: Мой план состоял в том, чтобы руководствоваться тем, какой ответ получил наибольшее количество голосов. Но до сих пор, после 4 ответов и 127 просмотров, ни у одного ответа не было ни одного возражения. Если некоторые ответы не годятся, было бы полезно увидеть некоторые комментарии относительно , почему они не годятся.

Ответы [ 8 ]

15 голосов
/ 01 апреля 2020

Рассматривали ли вы настройку файла setup.py? Это удобный способ объединения всех ваших ... хорошо настроенных в одном месте. Таким образом, все, что вам нужно сделать пользователю, это A) клонировать репо и B) запустить pip install ., чтобы запустить setup.py

. Об этом идет отличное обсуждение в стеке.

А также пример дескриптора, написанный парнем из запросов.

Это должно охватывать большинство случаев использования. Теперь, если вы хотите сделать его по-настоящему распространяемым, вам нужно будет настроить его в PyPi , официальном центре распространения.

Помимо этого, если вы спрашиваете, как сделать программа, "независимая от ОС", не подходит для всех. Это зависит от того, что вы делаете со своим кодом. Требуется изучить, как ваш конкретный код взаимодействует с этими ОС et c.

7 голосов
/ 07 апреля 2020

Есть много, много, много, много, много, много, много способов сделать это. Я расскажу о принципах каждого из них, и это вариант использования.

1. A python environment

Есть много способов сделать это. pipenv, conda, requirments.txt, et c et c.

С некоторыми из них вы можете указать python версии. Что касается других, просто укажите диапазон python версий, с которыми вы знаете, что он работает - например, если вы используете python 3.7, он вряд ли не будет поддерживать 3.6; есть только одно или два небольших изменения. 3.8 также должно работать.

Другой похожий метод - setup.py. Они обычно используются для распространения библиотек - например, PyInstaller (другое решение, о котором я упомяну ниже), или numpy, или wx Python, или PyQt5 et c - для импорта / использования из командной строки. python руководство по упаковке весьма полезно, и есть множество учебных пособий. (google python setup.py tutorial) Вы также можете указать требования в этих файлах.

2. Контейнер

Docker является большим. Если вы не слышали об этом, я буду удивлен. Краткий гугл резюме дает this , часть которого я процитирую:

Так почему все любят контейнеры и Docker? Джеймс Боттомли, бывший технический директор Parallels по виртуализации серверов и ведущий разработчик ядра Linux, объяснил, что гипервизоры виртуальных машин, такие как Hyper-V, KVM и Xen, основаны на эмуляции виртуального оборудования. условия системных требований. "

Контейнеры, однако, используют общие операционные системы. Это означает, что они намного более эффективны, чем гипервизоры в терминах системных ресурсов. Вместо виртуализации оборудования контейнеры располагаются поверх одного экземпляра Linux. Это означает, что вы можете «оставить после себя бесполезный 99,9% мусора ВМ, оставив вам небольшую аккуратную капсулу, содержащую ваше приложение»,

Это должно подвести итог для вас. (Обратите внимание, что вам не нужна указанная c ОС для контейнеров.)

3. Исполняемый файл

Существует 2 основных инструмента, которые делают это на момент написания. PyInstaller и cx_Freeze. Оба активно развиваются. Оба имеют открытый исходный код.

Вы берете свой сценарий, и инструмент компилирует его в байт-код, находит импорт, копирует его и создает переносную среду python, которая запускает ваш сценарий в целевой системе без конца пользователю нужно python.

Лично я предпочитаю PyInstaller - я один из разработчиков. PyInstaller предоставляет все свои функции через сценарий командной строки и поддерживает большинство библиотек, о которых вы только можете подумать, и расширяется, чтобы поддерживать больше. Для cx_Freeze требуется сценарий установки.

Оба инструмента поддерживают windows, Linux, macOS и другие. PyInstaller может создавать отдельные файлы exe или один пакет папок, тогда как cx_Freeze поддерживает только один пакет папок. PyInstaller 3.6 поддерживает python 2.7 и 3.5-3.7 - но 4.0 не будет поддерживать python 2. cx_Freeze прекратил поддержку python 2 со времени последнего основного выпуска (я думаю, что 6.0).

В любом случае, достаточно об инструментах; Вы можете посмотреть на них сами. (Подробнее см. https://pyinstaller.org и https://cx-freeze.readthedocs.io)

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

1 голос
/ 08 апреля 2020

Если вам может помочь преобразование всех ваших python скриптов в один исполняемый файл, то мой ответ ниже поможет ...

Я занимаюсь разработкой большое настольное приложение чисто в python с 3 лет. Это инструмент на основе GUI, созданный поверх библиотеки pyqt (python -привязки каркаса QT C ++).

В настоящее время я использую библиотеку пакетов " py2exe ": is расширение distutils, позволяющее создавать автономные Windows исполняемые программы (32-битные и 64-битные) из Python скриптов; все, что вам нужно сделать, это:

  1. установить py2exe: 'pip install py2exe'

  2. Создать скрипт setup.py: он используется указать содержимое окончательного EXE-файла (имя, значок, автор, файлы данных, общие библиотеки и т. д. c ..)

  3. Выполнить: python setup.py py2exe

Я также использую "Inno Setup" программное обеспечение для создания установщика: создание ярлыков, настройка переменных среды, значки и т. Д. c ...

1 голос
/ 06 апреля 2020

Если ваша программа меньше GUI или имеет веб GUI, вы можете поделиться кодом с помощью Google Colab Laboratory.

https://colab.research.google.com/

Каждый может запустить его в одной среде. Нет необходимости в установке.

1 голос
/ 05 апреля 2020

Лучший инструмент, который я использовал для этого, - Pipenv . Он не только унифицирует и упрощает весь рабочий процесс pip + virtualenv для вас, разработчика, но также гарантирует, что точные версии всех зависимостей (включая саму Python) встречаются, когда другие люди запускают ваш проект с it.

Веб-сайт проекта довольно хорошо объясняет, как использовать инструмент, но для полноты картины я приведу краткое объяснение здесь.

После того, как вы установили Pipenv (например, запустив pip install --user pipenv), вы можете go перейти в каталог вашего проекта и запустить pipenv --python 3.7, поэтому Pipenv создаст новый virtualenv для вашего проекта, создаст Pipfile и Pipfile.lock (подробнее на их позже). Если вы go впереди и запустите pipenv install -r requirements.txt, он установит все ваши пакеты. Теперь вы можете сделать pipenv shell для активации вашего нового virtualenv или pipenv run your_main_file.py для простого запуска вашего проекта.

Теперь давайте посмотрим на содержимое вашего Pipfile. Это должно быть что-то похожее на это:

[packages]
Django = "*"
djangorestframework = "*"
iso8601 = "*"
graypy = "*"
whitenoise = "*"

[requires]
python_version = "3.7"

Этот файл имеет удобочитаемые спецификации для зависимостей вашего проекта (обратите внимание, что он также указывает версию Python). Если в вашем файле require.txt были закрепленные версии, они также могут быть в вашем Pipfile, но вы можете смело использовать их с подстановочными знаками, поскольку точные версии хранятся в файле Pipfile.lock. Теперь вы можете запускать такие вещи, как pipenv update, чтобы обновить свои зависимости, и не забудьте зафиксировать Pipfile и Pipfile.lock в вашей VCS.

После того, как люди клонируют ваш проект, все, что им нужно сделать, это запустить pipenv install и Pipenv позаботится обо всем остальном (может даже установить для них правильную версию Python).

Надеюсь, это было полезно. Я никак не связан с Pipenv, просто хотел поделиться этим замечательным инструментом.

0 голосов
/ 08 апреля 2020

Я думаю, что вы можете использовать docker с вашим python https://github.com/celery/celery/tree/master/docker

, пожалуйста, следите за файлами, и я думаю, вы можете найти способ сделать ваш docker файл для ваших python скриптов!

0 голосов
/ 08 апреля 2020

Я дам вам очень краткое изложение некоторых из существующих доступных решений, когда дело доходит до python упаковки, которую вы можете выбрать (знание - сила):

  1. Следуйте Руководства, представленные на Структурирование вашего проекта , эти соглашения широко приняты сообществом python, и обычно это хорошая отправная точка, когда новички начинают кодировать на python. Следуя этим рекомендациям, питонисты, следящие за вашим проектом / источником в github или других подобных местах, сразу узнают, как его установить. Кроме того, загрузка вашего проекта в pypi, а также добавление CI, следуя этим правилам, будет безболезненным.

  2. Как только ваш проект структурирован должным образом в соответствии со стандартными соглашениями, следующим шагом могут быть некоторые из доступных морозильников , на случай, если вы захотите отправить своим конечным пользователям пакет, который они могут установить, не вынуждая их установить python на своих компьютерах. Имейте в виду, что эти инструменты не обеспечат вам никакой защиты кода ... в противном случае извлечение исходного кода python из конечных артефактов будет тривиальным во всех случаях

  3. Если вы вы все еще хотите отправить ваш проект пользователям, не заставляя их устанавливать какие-либо зависимости dev, и вы также заботитесь о защите кода, поэтому вы не хотите рассматривать какие-либо из существующих морозильников, вы можете использовать такие инструменты, как nuitka , шедскин , cython или аналогичные. Обычно обращение кода из артефактов, созданных этими инструментами, совсем не тривиально ... С другой стороны, защита от взлома - это другой вопрос, и если вы не предоставите конечному пользователю физический двоичный файл, вы не сможете сделать многое. об этом, кроме как замедлить их:)

  4. Кроме того, на случай, если вам понадобится использовать внешние языки в вашем проекте python, появится другая ссылка classi c, быть https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages, добавить системы сборки таких инструментов в CI, следуя правилам 1, было бы довольно просто.

Тем не менее, я бы предложил придерживаться к пункту 1, поскольку я знаю, что это будет более чем достаточно, чтобы вы начали, а также этот конкретный момент должен охватывать многие из существующих вариантов использования для python «стандартных» проектов.

Хотя это не так намеревался стать полным руководством, следуя за теми, кого вы сможете опубликовать sh ваш python проект в массы в кратчайшие сроки.

0 голосов
/ 07 апреля 2020

Поскольку он отсутствует в других ответах, я хотел бы добавить один совершенно другой аспект:

Модульное тестирование. Или тестирование в целом.

Обычно, хорошо иметь одну известную хорошую конфигурацию. В зависимости от того, каковы зависимости программы, вам может потребоваться протестировать различные комбинации пакетов. Вы можете сделать это в автоматическом режиме, например, tox или как часть конвейера CI / CD.

Не существует общего правила о том, какую комбинацию пакетов следует тестировать, но обычно совместимость с python2 / 3 главная проблема. Если у вас есть сильные зависимости от пакетов с основными различиями версий, вы можете рассмотреть возможность тестирования на этих различных версиях.

...