我在服务器端开发了相当大的python应用程序,包括所有数据库连接,文件提取,解析,命令行调用。
它变成了部署的噩梦,因为我在标准python lib之外使用了许多第三方模块。我忘记了他们。特别是不同的Linux操作系统使用不同的版本,因此使用OS的软件包管理器安装它们已不再适合。
我想在所有捆绑包中部署它们,包括我正在使用的当前python版本(大多数OS仍然附带Python 2.5,6我正在使用2.7和2.7特定功能。)。
此外,我必须教会客户端如何部署,以便他们可以在其他服务器上进行测试。但他们不是Linux专家。我必须在一个脚本中或通过复制和粘贴来轻松实现。
适用于Windows的Portablepython但是Linux没有任何内容。而且我从未使用过python Packaging,因为我通常在我只托管的服务器上工作。
请告诉我python的可用包装和部署选项,包括所有已安装的python模块和python本身。
答案 0 :(得分:5)
可以通过在部署中创建lib
或类似目录,并将其添加到Python中的sys.path
或外部PYTHONPATH
,然后复制包目录(通常 inside 你解压缩的目录)进入该目录。这使您可以使用已部署的代码保存包,例如,在Mercurial存储库中。
部署Python本身会有点麻烦,但是如果你可以控制它的安装位置(例如/usr/local
或/opt
),那么只需要./configure --prefix=...
,make
和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
答案 1 :(得分:1)
这是一个广泛的主题,但这里有一些指示。
对于您的Python项目及其依赖项,请查看virtualenv和pip。
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)
没有理由进行超级简单服务器端设置。
不要在此浪费时间。
将会发生多少台服务器安装?不多。
系统管理员希望基于服务器的应用程序具有一定程度的复杂性。
您有第三方套餐列表;他们按照该列表进行安装。
然后 - 在他们完成所有安装后 - 他们安装并配置您的包。
这就是许多在服务器上工作的系统管理员所期望的。他们期望依赖,他们期望安装多步。