0

我用 Python 开发了我的第一个网络服务器应用程序。这是一个但不寻常的,因为它不仅依赖于 python 模块(如龙卷风),还依赖于一些使用 SWIG 包装的专有 C++ 库。

现在是交付它的时候了(到 Linux 平台)。

由于对 C++ lib 的依赖,仅发送带有 requirements.txt 的源代码似乎还不够。唯一的解决方法是进行精确的 Linux 安装以确保 lib 的二进制兼容性。但在这种情况下,LD_PATH 等会出现问题。

另一种选择是编写 setup.py 来创建 sdist,然后使用pip install. 不幸的是,这意味着我必须在安装我的包之前杀死服务器的所有实例。解决方法是为每个实例使用 virtualenv。

但也许我错过了一些更简单的东西?

4

1 回答 1

1

如果您需要某些用户安装软件包,最简单的方法是编写setup.py- 但不仅仅是setup像大多数安装程序那样简单的功能。如果您查看一些包,它们具有非常复杂的setup.py脚本,可以构建许多东西和 C 扩展,并带有许多外部依赖项的安装脚本。

您可以像这样解决 LD_PATH 问题。如果您的应用程序有一个入口点,例如您保存在 pythonbin目录(或 system /usr/bin)中的某个脚本,您将覆盖 LD_PATH,如export LD_PATH="/my/path:$LD_PATH".

如果你的包是系统服务,比如一些服务器或守护进程,你可以编写系统包,例如 debian 包或 rpm。Debian 有很多脚本和机制来指出软件包的依赖关系。

因此,如果您需要列表中的一些系统库,请将其写在包源中,debian 将在您安装包时安装它们。例如,您的包具有 SWIG 和其他 DEV 模块的依赖项,并且您的 C 扩展将正确构建。

于 2013-07-20T07:40:17.673 回答