将Python应用程序安装到目标目录的最佳实践。

2024-05-23 21:01:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种将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

我确实找到了一个答案,尽管没有回答


Tags: installpy应用程序target目标binusrdist