4

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

由于我在标准 python lib 之外使用了许多第三方模块,因此它成为部署的噩梦。我失去了他们的踪迹。特别是不同的 Linux 操作系统使用不同的版本,因此使用操作系统的包管理器安装它们不再是好的。

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

此外,我必须教客户端如何部署,以便他们可以在其他服务器上进行测试。但他们不是 linux 专家。我必须让它变得简单,在一个脚本中或通过复制和粘贴。

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

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

4

4 回答 4

5

大多数 Python 包可以通过lib在您的部署中创建一个或类似的目录来部署,并将其添加到sys.pathPython 中或PYTHONPATH外部,然后将包目录(通常您解压缩的目录中)复制到该目录中。这使您可以将包与已部署的代码一起保存在 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
于 2011-07-15T09:57:07.377 回答
1

这是一个广泛的话题,但这里有一些提示。

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

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

Pip 是一个包安装工具,它将下载并安装您的包及其依赖项。查看 pip freeze 以提供一种快速定义您当前已安装在开发环境中的依赖项列表的方法。

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

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

于 2011-07-15T10:05:47.510 回答
0

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

可能是 VirtualEnv 是你需要的吗?

于 2011-07-15T10:06:38.083 回答
-4

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

不要在这上面浪费时间。

将安装多少台服务器?不太多。

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

你有一个第 3 方包的列表;他们遵循该列表并进行安装。

然后——在他们完成所有安装之后——他们安装并配置你的包。

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

于 2011-07-15T10:00:16.607 回答