Я ищу способ установки приложения Python на целевую систему вместе с ее зависимостями (при необходимости).
Исходный код в настоящее время находится в репозитории github.
Целевое приложение должно находиться в отдельном каталоге, чтобы иметь собственную среду (но я открыт, чтобы выслушать любые аргументы против этого);его можно вызвать, вызвав скрипт в каталоге bin/
по целевому пути.
My setup.py
содержит:
install_requires=['paho-mqtt'],
scripts = ["bin/mylauncher"],
, где mylauncher
выглядит следующим образом:
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
echo "MY APPLICATION is installed under ${DIR}"
export PYTHONPATH=${DIR}/..
python3 ${DIR}/../mymainscript.py "$@"
Мне кажется, что следующее очень хорошо мне подходит:
pip install \
https://github.com/<user>/<package>/archive/<commitish>.zip#\
egg=<package>&\
subdirectory=<path/to/setup.py>
--target /opt/mypackage
Итак, я получаю
+ opt
+ myypackage
+ bin
mylauncher
+ mypackage-x.y.z.dist-info
...
+ paho
...
+ paho_mqtt-1.4.0.dist-info
...
mymainscript.py
И я могу вызвать приложение с помощью /opt/mypackage/bin/mylauncher
.Итак, два вопроса:
1) Является ли приведенная выше схема установки (и сценарий запуска) приемлемой или связана с ошибкой?Мне не нравится возвращаться к вышеописанному взлому для запуска.
Я также не понимаю, каково было первоначальное намерение --target
.
2) Можно ли разрешить pip install
NOT переустановить paho-mqtt в подкаталоге, если он уже установлен для всей системы?
Например, если яиспользуйте --root=/opt/mypackage
вместо --target
, он находит его уже удовлетворенным:
Requirement already satisfied: paho-mqtt in /usr/local/lib/python3.5/dist-packages (from mypackage) (1.4.0)
Однако эффект в этом случае совершенно другой, в результате чего у меня теперь есть /opt/mypackage/usr/local/bin/mylauncher
и /opt/mypackage/usr/local/lib/python3.5/dist-packages/mymainscript.py
Я нашел похожий вопрос , но без ответа.