如何使用扩展deps正确部署python webserver应用程序?

时间:2013-07-20 07:22:30

标签: python swig web-deployment

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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