我用Python开发了我的第一个webserver应用程序。 这是一个不寻常的,因为它不仅依赖于python模块(如龙卷风),还依赖于使用SWIG包装的一些专有C ++库。
现在是时候交付它了(到Linux平台)。
由于依赖于C ++ lib,仅发送带有requirements.txt的源代码似乎不够。唯一的解决方法是安装确切的Linux以确保lib的二进制兼容性。但在这种情况下,LD_PATH等会出现问题。
另一种选择是编写setup.py来创建sdist,然后使用pip install
进行部署。
不幸的是,这意味着我必须在安装我的软件包之前杀死服务器的所有实例。解决方法是为每个实例使用virtualenv。
但也许我错过了一些更简单的东西?
答案 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扩展将正确构建。