将python脚本和依赖项捆绑到单个fi中

2024-06-01 09:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我读过一些关于Python卵的文章,但可以使用一些方法上的建议。我今天的方法是复制并简单地运行python脚本。由于这工作得很好,我想也许有一种方法可以将脚本本身与它们所依赖的(内部)模块捆绑在一起,将捆绑复制到服务器并执行它们。不明白为什么我需要使用“pip”安装任何东西。

现在,你们推荐什么样的设置?我是否应该在本地计算机上生成egg,并让管理服务器将egg文件复制到服务器上?我更愿意从管理服务器上复制服务器所需的所有内容,而不是让服务器自己下拉依赖项,这样我就不必在所有防火墙上打更多的洞。既然鸡蛋通常需要降低依赖性,也许鸡蛋不是解决问题的办法?

我的大多数服务器都运行Python2.6,但我确实有一些运行Python2.4和3.2。

你好, 肯尼斯


Tags: 模块pip文件方法函数服务器脚本egg
2条回答

更新2016wagon帮助构建具有脱机安装依赖项的控制盘包。


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

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

You can create a simple bundle that contains all of the dependencies you wish to install using.

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

Once you have a bundle, you can then uninstall it using:

$ 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

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

.pex files are just carefully constructed zip files with a #!/usr/bin/env python and special __main.py__

相关问题 更多 >