python - 在一个 Bundle 中轻松部署 Python 和应用程序,适用于 Linux

标签 python linux deployment portability portable-applications

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

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

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

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

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

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

最佳答案

大多数 Python 包都可以通过在部署中创建 lib 或类似目录并将其添加到 Python 中的 sys.pathPYTHONPATH< 来部署 外部,然后将包目录(通常是 您解压缩的目录中)复制到该目录中。这让您可以将包与您部署的代码一起保存在 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

关于python - 在一个 Bundle 中轻松部署 Python 和应用程序,适用于 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705193/

相关文章:

java - 在 Windows 可执行文件中嵌入 JRE?

linux - Bash 修改一个变量

apache - 想要从 https URL 中删除端口号

Python重试打开文件

python - Sublime Text插件开发

linux - 如何在 Linux 设备驱动程序中实现内存映射功能?

linux - VLCJ JPanel播放视频流预览

c# - 部署后连接字符串修改

python - Seaborn - 极坐标图 - 如何更改 FacetGrid 中的度数

python matplotlib 保存图形而不显示