@MasterCopipaster

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

возможно мой вопрос покажется странным. Но погуглив я так и не понял к какому решению данного вопроса пришло комюнити. Собственно что я хочу узнать. У меня есть некая програмулина написанная на Python.
Я хочу разослать ее заказчикам и тут я столкнулся с такой проблемой.
Я пришлю им скрипты, а что на счет пакетов? моя софтина использует кучу разных пакетов. Можно ли как то удобно передать эти пакеты вместе с софтиной? Например в PHP в этом плане есть composer где можно написать composer install и все пакеты нужные накатятся, в node есть npm с аналогичной функцией. А что с Python? Я так понял там раньше было какое то подобие пакетного менеджера. Но то ли он не взлетел, то ли его поддержка прекратилась. Если создавать проект через Pycharm он создает venv в которой хранит модули установленные конкретно для этого проекта.
Но нужно ли мне эту папку отправлять с другими скриптами? - мне этот вопрос совсем не понятен.
Разъясните этот момент пожалуйста - у меня условно есть чистый комп на котором установлен Python и все.
Как было бы удобнее передать информацию об используемых пакетах? или передать эти пакеты вместе с софтиной?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
А в случае 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 или иной подобной утилиты. Да, для каждой платформы может быть свой сценарий упаковки.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы