@MasterCopipaster

Как правильно поставлять готовые приложения на Python?

возможно мой вопрос покажется странным. Но погуглив я так и не понял к какому решению данного вопроса пришло комюнити. Собственно что я хочу узнать. У меня есть некая програмулина написанная на Python.
Я хочу разослать ее заказчикам и тут я столкнулся с такой проблемой.
Я пришлю им скрипты, а что на счет пакетов? моя софтина использует кучу разных пакетов. Можно ли как то удобно передать эти пакеты вместе с софтиной? Например в PHP в этом плане есть composer где можно написать composer install и все пакеты нужные накатятся, в node есть npm с аналогичной функцией. А что с Python? Я так понял там раньше было какое то подобие пакетного менеджера. Но то ли он не взлетел, то ли его поддержка прекратилась. Если создавать проект через Pycharm он создает venv в которой хранит модули установленные конкретно для этого проекта.
Но нужно ли мне эту папку отправлять с другими скриптами? - мне этот вопрос совсем не понятен.
Разъясните этот момент пожалуйста - у меня условно есть чистый комп на котором установлен Python и все.
Как было бы удобнее передать информацию об используемых пакетах? или передать эти пакеты вместе с софтиной?
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
А в случае Python есть виртуальные окружения (venv) и pip.
Инициализируешь venv.
А потом просто перечисляешь все пакеты и их версии в файле requirements.txt и запускаешь pip install -r requirements

А вот как передавать заказчикам - зависит от того, что это за софт.
Где-то может оказаться удобнее использовать zipapp, а где-то может будет лучше запаковать Docker/OCI-образ.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@PNEroshevich
Я пришел к следующему варианту, требовалось разворачивать микросервисы на машине без интернета. Чтобы собрать папку с пакетами (под windows)
for /F "tokens=*" %%i in (requirements.txt) do (
python.exe -m pip download --quiet --platform manylinux2014_x86_64 --platform linux_x86_64 --python-version 310 --platform any --only-binary=:all: -d \dist %%i
)


А для установки

python -m pip install --no-deps -r requirements.txt --no-index --find-links   /dist


Пакеты скачиваются под определенную платформу, может отличаться
Ответ написан
Комментировать
@akonovalov
Программист на компьютере
Навскидку 2 решения напрашиваются.
1) Упаковать в Docker-образ (подойдёт, если у вас веб-сервис)
2) Упаковать в "бинарник" с помощью Pyinstaller или иной подобной утилиты. Да, для каждой платформы может быть свой сценарий упаковки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы