在Linux中轻松部署Python和应用程序

时间:2011-07-15 09:39:27

标签: python linux deployment portability portable-applications

我在服务器端开发了相当大的python应用程序,包括所有数据库连接,文件提取,解析,命令行调用。

它变成了部署的噩梦,因为我在标准python lib之外使用了许多第三方模块。我忘记了他们。特别是不同的Linux操作系统使用不同的版本,因此使用OS的软件包管理器安装它们已不再适合。

我想在所有捆绑包中部署它们,包括我正在使用的当前python版本(大多数OS仍然附带Python 2.5,6我正在使用2.7和2.7特定功能。)。

此外,我必须教会客户端如何部署,以便他们可以在其他服务器上进行测试。但他们不是Linux专家。我必须在一个脚本中或通过复制和粘贴来轻松实现。

适用于Windows的Portablepython但是Linux没有任何内容。而且我从未使用过python Packaging,因为我通常在我只托管的服务器上工作。

请告诉我python的可用包装和部署选项,包括所有已安装的python模块和python本身。

4 个答案:

答案 0 :(得分:5)

可以通过在部署中创建lib或类似目录,并将其添加到Python中的sys.path或外部PYTHONPATH,然后复制包目录(通常 inside 你解压缩的目录)进入该目录。这使您可以使用已部署的代码保存包,例如,在Mercurial存储库中。

部署Python本身会有点麻烦,但是如果你可以控制它的安装位置(例如/usr/local/opt),那么只需要./configure --prefix=...makesudo make install。然后,只要脚本被标记为可执行文件,就可以通过像#!/usr/local/bin/python这样的行开始将脚本指向该Python。

例如,如果您要部署需要docutils的代码,那么您可以执行以下操作:

cd projectDir
mkdir -p lib
tar xzvf ~/Downloads/docutils-0.8.tgz
mv docutils-0.8/docutils lib
rm -r docutils-0.8

然后,此目录中的Python模块将在开头添加以下内容:

#!/usr/local/bin/python

import os
import sys
sys.path(os.path.join(os.path.dirname(sys.argv[0]), "lib"))
import docutils

答案 1 :(得分:1)

这是一个广泛的主题,但这里有一些指示。

对于您的Python项目及其依赖项,请查看virtualenvpip

Virtualenv在您的目标平台上提供了一个孤立的python环境,然后您可以将项目安装到该环境中。

Pip是一个软件包安装工具,可以下载并安装软件包及其依赖项。看一下pip freeze,以便快速定义当前在开发环境中安装的依赖项列表。

如果您想了解有关Python中软件包分发的更多信息,那么您还应该阅读distribute项目。

对于系统的非python组件,包括安装python本身,可以使用像Puppet这样的系统自动化工具,但听起来它可能对你的需求有点过分。如果您正在寻找一步安装,您应该考虑为目标系统package manager构建一个包。

答案 2 :(得分:0)

  

我想在所有模块中部署它们,包括我正在使用的当前python版本(大多数操作系统仍然附带Python 2.5,6我使用2.7和2.7特定功能。)。

VirtualEnv可能是您需要的吗?

答案 3 :(得分:-4)

没有理由进行超级简单服务器端设置。

不要在此浪费时间。

将会发生多少台服务器安装?不多。

系统管理员希望基于服务器的应用程序具有一定程度的复杂性。

您有第三方套餐列表;他们按照该列表进行安装。

然后 - 在他们完成所有安装后 - 他们安装并配置您的包。

这就是许多在服务器上工作的系统管理员所期望的。他们期望依赖,他们期望安装多步。