如何在1个文件中打包runnable python程序

时间:2012-03-01 14:34:47

标签: python zip package egg

我打算将我的大型python程序打包成一个文件;

我的要求是:

  • 只下载1个文件
  • 文件可以校验和
  • 理想情况下文件包含一些版本信息
  • 使用system python

到目前为止,包格式的最佳候选者是.egg和.zip。

鸡蛋和拉链之间的实际差异是什么?

我打算做什么:

嵌入式系统下载我的代码,例如package.zip;它启动我的代码,例如python2 package.zip我的代码可以验证自己,例如md5sum sys.argv[0]。在我的服务器上报告和监控校验和。

3 个答案:

答案 0 :(得分:2)

Zipfiles有点神奇,因为内置导入会自动导入它们。我从来没有试过直接进口鸡蛋​​,所以我不知道它是否会起作用。

使用鸡蛋获得的巨大好处是,您可以为包指定依赖关系。这对你来说可能不是什么大问题。使用鸡蛋,您可以设置要求,发布到pypi(如果需要),并且您的用户生活更轻松。

打包完成后,pip(http://pypi.python.org/pypi/pip)可以更轻松地处理您的包裹。以下是直接从点子页面翻录的例子 -

$ pip install simplejson

$ pip install --upgrade simplejson

$ pip uninstall simplejson

你从一点点工作中获得了很多好处。如果你不想把你的东西推到pypi,你可以在你自己的秘密Pypi(阅读网络服务器)上发布它,并指定pip使用不同的URL来查找包。

$ pip install -i http://mycoolserver.com/pypi

我不是PIP专家,但是通过简单的安装(pip的前身),您可以使用Apache轻松创建自己的PYPI。只需发布pypi目录,并允许它显示索引(我认为这是正确的术语),以便您可以浏览pypi的文件系统。使用此设置,创建一个以您的包命名的目录,然后将鸡蛋放入其中。它“只是有效”(对我来说很好: - ))

答案 1 :(得分:1)

鸡蛋 是一个zip文件。

您可以在文件中使用md5sum(或任何其他哈希函数),无论您使用哪种方法打包它 - 它们不关心文件的扩展名,只是二进制内容是同样的。

答案 2 :(得分:0)

编辑:我在澄清您的需求之前写了这个。这似乎不合适,因为它不使用系统python可执行文件。

您的问题标题向我建议您要将其打包为常规(即非pythonista) Windows最终用户,以便他们只需双击即可运行它。 Py2exe正是出于这个目的。

我采用了这个假设,因为大多数Linux用户都希望它是一个带有setup.py文件的存档,而不是一个可执行文件。至于Mac OS X,我真的不知道。