我开发在服务器端相当大的python应用程序,所有数据库连接,文件提取,parsing,命令行调用。
因为我在标准的python lib之外使用了许多第三方模块,所以它成为部署的噩梦。 而我失去了他们的踪迹。 特别是不同的Linux操作系统使用不同的版本,所以使用操作系统的软件包pipe理器来安装它们不再是好事。
我想部署他们在包括目前的python版本,我正在使用(大多数操作系统仍然与Python 2.5,6我使用2.7和2.7特定function)。
更重要的是,我必须教导客户如何部署,以便在其他服务器上进行testing。 但他们不是Linux专家。 我必须在一个脚本中或通过复制和粘贴来简化。
有Windows的PortablePython但Linux没有。 而我从来没有使用python包装,因为我通常在服务器上工作,我只主办。
请赐教python的可用打包和部署选项,包括所有已安装的python模块和python本身。
大多数Python软件包可以通过在部署中创建一个lib
或类似的目录,然后将其添加到Python中的sys.path
或外部的PYTHONPATH
,然后将软件包目录(通常位于您解压缩的目录中)复制到该目录中。 这可以让你保留包含你部署的代码的包,比如在Mercurial仓库中。
部署Python本身会更麻烦一点,但是如果你可以控制它的安装位置(比如/usr/local
或/opt
),那么这只是./configure --prefix=...
的问题。 ,并sudo 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
这是一个广泛的话题,但是这里有一些提示。
对于你的Python项目和它的依赖关系,看看virtualenv和pip 。
Virtualenv在你的目标平台上提供了一个独立的Python环境,然后你可以安装你的项目。
Pip是一个软件包安装工具,可以下载和安装你的软件包及其依赖项。 查看pip freeze来提供一种快速的方式来定义您当前在开发环境中安装的依赖关系列表。
如果你想了解更多关于Python包的分发,那么你也应该阅读关于分发项目。
对于系统的非python组件(包括安装python本身),可以使用像Puppet这样的系统自动化工具,但是听起来像是可能会为你的需要矫枉过正。 如果您正在寻找一个一步的安装,您应该考虑为您的目标系统的包管理器构建一个包。
我想部署他们在所有的一个模块,包括我使用的当前Python版本(大多数操作系统仍然与Python 2.5,6我使用2.7和2.7特定功能)。
可能是VirtualEnv是你需要什么?
超级简单服务器端安装没有任何理由。
不要浪费时间。
将会发生多少服务器安装? 不多。
系统管理员希望在基于服务器的应用程序中具有一定程度的复杂性。
你有一个第三方软件包的列表; 他们按照这个清单进行安装。
然后 – 完成所有安装后 – 他们安装并配置您的软件包。
这就是许多在服务器上工作的系统管理员所期望的。 他们期待依赖性,他们期望多步骤安装。