Я хочу разместить программу на Python на GitHub и попросить других людей загрузить и запустить ее на своих компьютерах с различными операционными системами. Я относительно новичок в Python, но использовал его достаточно, чтобы заметить, что заставить работать разные версии всех включенных модулей может быть проблематично. Я только что обнаружил использование requirements.txt
(сгенерированное pipreqs
и развернутое с помощью команды pip install -r /path/to/requirements.txt
), но был очень удивлен, заметив, что на requirements.txt
самом деле не указано, какая версия python используется, поэтому очевидно, что это не полное решение само по себе. Поэтому мой вопрос: какой набор спецификаций / файлов / чего-то еще необходим для того, чтобы кто-то, загружающий мой проект, действительно мог запустить его с наименьшим количеством возможных проблем.
РЕДАКТИРОВАТЬ: Мой план должен был руководствоваться тем, какой ответ получил наибольшее количество голосов. Но до сих пор, после 4 ответов и 127 просмотров, ни у одного ответа не было ни одного возражения. Если некоторые ответы не годятся, было бы полезно увидеть некоторые комментарии о том, почему они не годятся.
sys
илиos
или функция типа подпроцесса или более математическим / аналитическим? Первый может меняться с каждой версией Python, а затем может быть совершенно независимым от версии. Какие зависимые библиотеки? Numpy и Pandas отлично работают на разных платформах, так что вы можете просто проверить, что у вас есть минимальная версия. Какая основная версия Python? Разница между Python 2.x и 3.x с зависимыми библиотеками становится еще сложнее. Если вы пишете хороший код, ориентированный на общий основной выпуск, это хорошее начало.Ответы:
Рассматривали ли вы создание
setup.py
файла? Это удобный способ объединения всех ваших ... хорошо настроенных в одном месте. Таким образом, все, что должен сделать ваш пользователь, это A) клонировать репозиторий и B) запуститьpip install .
для запускаsetup.py
Об этом идет отличная дискуссия.
А также пример дескриптора, написанный по просьбе парня.
Это должно охватывать большинство случаев использования. Теперь, если вы хотите сделать его действительно распространяемым, вам нужно будет настроить его в PyPi , официальном центре распространения.
Кроме того, если вы спрашиваете, как сделать программу «независимой от ОС», то не существует одного, подходящего всем. Это зависит от того, что вы делаете со своим кодом. Требуется изучить, как ваш конкретный код взаимодействует с этими ОС и т. Д.
источник
Есть много, много, много, много, много, много, много способов сделать это. Я расскажу о принципах, лежащих в основе каждого, и это вариант использования.
1. среда Python
Есть много способов сделать это.
pipenv
, Конда,requirments.txt
и т. д. и т. д.С некоторыми из них вы можете указать версии Python. Что касается других, просто укажите диапазон версий Python, с которыми он работает - например, если вы используете Python 3.7, он вряд ли не будет поддерживать 3.6; есть только одно или два небольших изменения. 3.8 тоже должно работать.
Еще один похожий метод
setup.py
. Они обычно используются для распространения библиотек - например, PyInstaller (другое решение, о котором я упомяну ниже), или numpy, или wxPython, или PyQt5 и т. Д. - для импорта / использования из командной строки. Руководство по пакетированию на Python весьма полезно, и есть множество учебных пособий. (Googlepython setup.py tutorial
) Вы также можете указать требования в этих файлах.2. Контейнер
Докер большой. Если вы не слышали об этом, я буду удивлен. Краткий гугл резюме дает это , часть которого я процитирую:
Это должно подвести итог для вас. (Обратите внимание, что вам не нужна конкретная ОС для контейнеров.)
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, пару готовых к загрузке exe-файлов (по одному для каждой платформы) и инструкции о том, как встроить код в исполняемый файл.
источник
Лучший инструмент, который я использовал для этого, - это Pipenv . Он не только унифицирует и упрощает весь рабочий процесс pip + virtualenv для вас, разработчика, но также гарантирует, что точные версии всех зависимостей (включая сам Python) встречаются, когда другие люди запускают ваш проект с ним.
Веб-сайт проекта довольно хорошо объясняет, как использовать инструмент, но для полноты картины я приведу краткое объяснение здесь.
После того, как вы установили Pipenv (например, запустив
pip install --user pipenv
), вы можете перейти в каталог вашего проекта и запустить егоpipenv --python 3.7
, поэтому Pipenv создаст новый virtualenv для вашего проекта, создаст Pipfile и Pipfile.lock (подробнее о них позже) , Если вы продолжите и запустите,pipenv install -r requirements.txt
он установит все ваши пакеты. Теперь вы можете сделать,pipenv shell
чтобы активировать ваш новый virtualenv, илиpipenv run your_main_file.py
просто запустить ваш проект.Теперь давайте посмотрим на содержимое вашего Pipfile. Должно быть что-то похожее на это:
Этот файл имеет удобочитаемые спецификации для зависимостей вашего проекта (обратите внимание, что он также указывает версию Python). Если в вашем файле require.txt были закрепленные версии, они также могут быть в вашем Pipfile, но вы можете смело использовать их подстановочные знаки, потому что точные версии хранятся в Pipfile.lock. Теперь вы можете запускать такие вещи, как
pipenv update
обновление ваших зависимостей, и не забудьте зафиксировать Pipfile и Pipfile.lock в вашей VCS.Как только люди клонируют ваш проект, все, что им нужно сделать, это запустить,
pipenv install
а Pipenv позаботится обо всем остальном (он может даже установить для них правильную версию Python).Я надеюсь, что это было полезно. Я никак не связан с Pipenv, просто хотел поделиться этим замечательным инструментом.
источник
Если ваша программа меньше относится к графическому интерфейсу или имеет веб-интерфейс, вы можете поделиться кодом с помощью Google Colab Laboratory.
https://colab.research.google.com/
Каждый может запустить его в одной среде. Нет необходимости в установке.
источник
В случае, если преобразование всех ваших скриптов Python в один исполняемый файл может помочь вам, тогда мой ответ ниже поможет ...
Я занимаюсь разработкой большого настольного приложения исключительно на python с 3 лет. Это инструмент на основе графического интерфейса, построенный на основе библиотеки pyqt (привязки к Python инфраструктуры QT C ++).
В настоящее время я использую библиотеку пакетов " py2exe ": это расширение distutils, которое позволяет создавать автономные исполняемые программы Windows (32-разрядные и 64-разрядные) из сценариев Python; все, что вам нужно сделать, это:
установить py2exe: 'pip install py2exe'
Создайте скрипт setup.py: он используется для указания содержимого конечного EXE-файла (имя, значок, автор, файлы данных, общие библиотеки и т. Д.)
Выполнить: python setup.py py2exe
Я также использую программное обеспечение «Inno Setup» для создания установщика: создание ярлыков, установка переменных среды, значков и т. Д.
источник
Я думаю, что вы можете использовать докер с вашим питоном https://github.com/celery/celery/tree/master/docker
Пожалуйста, следите за файлами, и я думаю, вы можете найти способ сделать свой файл Docker для ваших скриптов Python!
источник
Поскольку это отсутствует в других ответах, я хотел бы добавить один совершенно другой аспект:
Модульное тестирование. Или тестирование в целом.
Обычно хорошо иметь одну известную хорошую конфигурацию. В зависимости от того, каковы зависимости программы, вам может потребоваться протестировать различные комбинации пакетов. Вы можете сделать это в автоматическом режиме, например,
tox
или как часть конвейера CI / CD.Не существует общего правила о том, какую комбинацию пакетов следует тестировать, но обычно совместимость с python2 / 3 является серьезной проблемой. Если у вас есть сильные зависимости от пакетов с основными различиями версий, вы можете рассмотреть возможность тестирования на этих разных версиях.
источник
... making sure it runs correctly ...
? Тестирование является неотъемлемой частью убедившись , что она работает правильно, поэтому это важная часть подготовки распространить его, но он все еще не иметь ничего общего с фактически распределяя егоЯ дам вам очень краткое изложение некоторых из существующих доступных решений, когда речь заходит о пакете Python, который вы можете выбрать (знание - сила):
Следуйте инструкциям, приведенным в разделе « Структурирование вашего проекта» , эти соглашения широко приняты сообществом Python, и обычно это хорошая отправная точка, когда новички начинают писать код на Python. Следуя этим рекомендациям, питонисты, следящие за вашим проектом / источником в github или других подобных местах, сразу узнают, как его установить. Кроме того, загрузка вашего проекта в pypi, а также добавление CI, следуя этим правилам, будет безболезненным.
Как только ваш проект структурирован должным образом в соответствии со стандартными соглашениями, следующим шагом может быть использование некоторых из доступных морозильников , в случае, если вы хотите отправить своим конечным пользователям пакет, который они могут установить, не вынуждая их установить Python на своем компьютере. машины. Имейте в виду, что эти инструменты не обеспечат вам никакой защиты кода ... в противном случае извлечение исходного кода Python из конечных артефактов будет тривиальным во всех случаях.
Если вы все еще хотите отправить свой проект пользователям, не заставляя их устанавливать какие-либо зависимости dev, и вы также заботитесь о защите кода, поэтому не хотите рассматривать какие-либо из существующих морозильных камер, вы можете использовать такие инструменты, как nuitka , shedskin , Cython или аналогичные. Обычно обращение кода из артефактов, созданных этими инструментами, совсем не тривиально ... С другой стороны, защита от взлома - это другой вопрос, и если вы не предоставите конечному пользователю физический двоичный файл, вы не сможете сделать многое. об этом, кроме как замедлить их :)
Кроме того, на случай, если вам понадобится использовать внешние языки в вашем проекте Python, на ум придет другая классическая ссылка: https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages , добавив системы сборки таких инструментов в CI, выполнив правила 1 было бы довольно легко.
Тем не менее, я бы предложил придерживаться пункта 1, поскольку я знаю, что это будет более чем достаточно, чтобы вы начали, а также этот конкретный момент должен охватывать многие из существующих вариантов использования для "стандартных" проектов Python.
Хотя это и не предназначено для того, чтобы быть полным руководством, следуя им, вы сможете опубликовать свой проект на языке python в массы в кратчайшие сроки.
источник