用virtualenv分发python代码?

mal*_*ngi 11 python installer virtualenv distribute

我想将一些具有一些外部依赖性的python代码分发给只安装了核心python的机器(以及不熟悉的用户easy_install等).

我想知道是否可以将virtualenv用于此目的?我应该能够编写一些触发virtualenv的bash脚本(使用合适的软件包),然后运行我的代码..但这看起来有些混乱,我想知道我是否重新发明了这个轮子?

是否有任何简单的解决方案来分发具有依赖关系的python代码,理想情况下sudo在客户端机器上不需要?

Vin*_*jip 6

为此,您可以使用PyInstaller 之类的工具。您的应用程序将在所有平台上显示为单个可执行文件,并包含依赖项。用户甚至不需要安装 Python!

以我的logview包为例,它依赖于 PyQt4 和 ZeroMQ,并包括所有使用 PyInstaller 创建的 Linux、Mac OSX 和 Windows 发行版。


Jac*_*Leo 6

Buildout - http://pypi.python.org/pypi/zc.buildout
作为示例看看我的清洁项目:http://hg.jackleo.info/hyde-0.5.3-buildout-enviroment/src 它只有2个文件做魔术,更多的Makefile是可选的,但你需要bootstrap.py(Make文件下载,但它只在Linux上运行).buildout.cfg是主文件,您可以在其中编写依赖项和配置项目的方式.
为了得到bootstrap.py刚刚从下载http://svn.zope.org/repos/main/zc.buildout/trunk/bootstrap/bootstrap.py
然后运行python bootstap.pybin/buildout.我不建议在本地安装buildout,尽管可能,只需使用一个bootstrap下载.

我必须承认,扩建不是最简单的解决方案,但它真的很强大.所以学习值得时间.

更新2014-05-30
由于它最近被投票并用作答案(可能),我想通知一些变化.

首先 - buildout现在从github下载https://raw.githubusercontent.com/buildout/buildout/master/bootstrap/bootstrap.py

由于扩建2的变化,hyde项目可能会失败.

在这里你可以找到更好的样本http://www.buildout.org/en/latest/docs/index.html我也想建议查看"与Buildout相关的链接集合"部分,它可能包含你项目的信息.

其次,我个人更赞成可以使用python安装的setup.py脚本.关于鸡蛋结构的更多信息可以在http://peak.telecommunity.com/DevCenter/PythonEggs找到,如果这看起来太可怕了 - 请查看google(查询python egg).在我看来,它实际上比buildout更简单(绝对更容易调试),并且它可能更有用,因为它可以更容易地分发并在virtualenv或全局的帮助下安装在任何地方,在buildout中你必须提供所有的一直用源代码构建脚本.


Dan*_*man 5

如果这就是您的要求,您不想分发您的 virtualenv。但是您可以使用pip来创建一个需求文件 - 通常称为requirements.txt- 并告诉您的用户创建一个 virtualenv 然后运行pip install -r requirements.txt,这将为他们安装所有依赖项。

见PIP文档进行的说明,要求文件格式,并在Pinax项目为做到这一点非常好项目的一个例子。

  • 谢谢 Daniel,但我希望不必分发为用户执行此操作的 bash 脚本(以及我需要安装 virtualenv 的 sudo 命令)? (2认同)