在目标目录上安装python应用程序的最佳实践

时间:2019-06-23 15:45:36

标签: python pip

我正在寻找一种将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,但没有得到答案。

0 个答案:

没有答案