将python脚本和依赖项捆绑到一个文件中

时间:2015-01-30 13:49:04

标签: python scripting egg

我有一些脚本有自己的一些函数副本,所以我将这些函数提取到一个模块并让脚本导入该函数。这些脚本将被复制到一堆Linux服务器并执行。当脚本独立运行时,我只需将文件复制到服务器并执行“python”。

我有一个中央管理服务器,可以在不同的服务器上复制和运行脚本。

我已经对python鸡蛋进行了一些阅读,但可以使用方法的一些建议去寻找。我今天这样做的方法是复制并简单地运行python脚本。由于这很好用,我想也许有一种方法可以将脚本本身与它们所依赖的(内部)模块捆绑在一起,将捆绑包复制到服务器并执行它们。不明白为什么我需要使用“pip”安装任何东西。

现在,你们推荐什么样的设置?我是否可以在我的本地计算机上构建鸡蛋,并让管理服务器将egg文件复制到服务器上?我宁愿从管理服务器复制服务器所需的所有内容,而不是让服务器自己拉下依赖项,这样我就不必在所有防火墙上打更多漏洞了。由于鸡蛋通常需要降低依赖性,也许鸡蛋不是要走的路?

我的大多数服务器都运行python 2.6,但我确实有一些运行python 2.4和3.2。

问候, 肯尼斯

2 个答案:

答案 0 :(得分:6)

您可能需要考虑查看可以从python包创建可执行文件的Twitter的PEX库:https://pex.readthedocs.org/en/latest/whatispex.html

  

.pex文件只是精心构造的zip文件,带有#!/ usr / bin / env python和特殊__main.py__

答案 1 :(得分:4)

2016年更新wagon有助于构建具有依赖关系的轮组以进行离线安装。


对于简单的项目,将所有源保存在一个文件夹中并将其作为一个整体进行复制就足够了。您可以使用git将代码推送到中央存储库并将其提取到服务器,而无需构建任何软件包。 FabricAnsible是两个可以帮助您自动化部署过程的工具。 (例如,远程运行git pull并删除所有pyc个文件。

如果项目之间存在共享依赖关系,pipwheels是鸡蛋的现代替代品:

  

您可以创建一个包含所有依赖项的简单包   你想安装使用。

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)
     

有了捆绑包后,您可以使用以下方法将其卸载:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --use-wheel --no-deps $tempdir/*

(来自pip docs