我在服务器端开发了相当大的python应用程序,所有的数据库连接,文件提取,解析,命令行调用。
它成了部署的噩梦,因为我在标准python库之外使用了许多第三方模块。我失去了他们的踪迹。尤其是不同的Linux操作系统使用它们的不同版本,因此使用操作系统的包管理器来安装它们不再是一件好事。
我想将它们部署在一个包中,包括我正在使用的当前python版本(大多数操作系统仍然附带Python2.5,6我正在使用2.7和2.7的特定功能。)
此外,我还必须教客户端如何部署,这样他们才能在其他服务器上进行测试。但他们不是linux专家。我必须让它变得简单,在一个脚本中或通过复制和粘贴。
有适用于Windows的Portablepython,但没有适用于Linux的。而且我从来没有使用过python Packaging,因为我通常只在自己托管的服务器上工作。
请告诉我python可用的打包和部署选项,包括所有已安装的python模块和python本身。
发布于 2011-07-15 17:57:07
大多数Python包可以通过在部署中创建lib或类似目录,并将其添加到Python中的sys.path或外部的PYTHONPATH中,然后将包目录(通常位于您解压缩的目录中)复制到该目录中。这使您可以将包含已部署代码的包保存在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发布于 2011-07-15 18:05:48
这是一个宽泛的主题,但这里有一些要点。
对于您的Python项目及其依赖项,可以查看virtualenv和pip。
Virtualenv在您的目标平台上提供了一个隔离的python环境,然后您可以在其中安装您的项目。
Pip是一个软件包安装工具,它将下载并安装您的软件包及其依赖项。看一看pip freeze,它提供了一种快速定义当前已安装在开发环境中的依赖项列表的方法。
如果您想了解更多关于Python包分发的信息,那么您还应该阅读有关distribute项目的内容。
对于系统的非python组件,包括安装python本身,可以使用像Puppet这样的系统自动化工具,但听起来它可能无法满足您的需求。如果您正在寻找一步安装,那么您可能应该考虑为目标系统的package manager构建一个包。
发布于 2011-07-15 18:06:38
我想把它们部署在一个模块中,包括我正在使用的当前python版本(大多数操作系统仍然附带Python2.5,6我正在使用2.7和2.7的特定功能。)
也许VirtualEnv就是你所需要的?
https://stackoverflow.com/questions/6705193
复制相似问题