我正在寻找一种将python应用程序及其依赖项(如果需要)安装到目标系统上的方法
源代码目前位于github repo中
目标应用程序应该驻留在一个单独的目录中,以便有自己的环境(但我愿意听到任何反对这一点的论点);应该可以通过调用目标路径下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 hack
我也不明白--target
背后的初衷是什么
2)如果paho mqtt已经在系统范围内安装,是否有办法让pip install
不在子目录中重新安装它
例如,如果我使用--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
我确实找到了一个答案,尽管没有回答
目前没有回答
相关问题 更多 >
编程相关推荐