我正在寻找一种将python应用程序及其依赖项(如果需要)安装到目标系统的方法。
源代码当前位于github存储库中。
目标应用程序应该驻留在单独的目录中,以便拥有自己的环境(但是我很乐意听到与此相反的任何论点);应该可以通过在目标路径下的bin/
目录中调用脚本来调用它。
我的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)上面的安装布局(和启动脚本)是否可以接受或是否注定会失败?我不喜欢针对启动器重复上述bash攻击。
我也不明白--target
背后的初衷是什么。
2)有没有办法让pip install
不在子目录中重新安装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
我确实找到了similar question,但没有得到答案。