问题 用virtualenv分发python代码?


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

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

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


5733
2018-04-04 08:08


起源



答案:


建设 - 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.py 和 bin/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 如果这看起来太可怕 - 查找谷歌(查询 python egg)。在我看来,它实际上比buildout更简单(绝对更容易调试),并且它可能更有用,因为它可以更容易地分发并在virtualenv或全局的帮助下安装在任何地方,在buildout中你必须提供所有的始终使用源代码构建脚本。


5
2018-04-04 08:23





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

以我的身份为例 日志查看 package,依赖于PyQt4和ZeroMQ,包括使用PyInstaller创建的Linux,Mac OSX和Windows的发行版。


4
2018-04-04 08:17





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

有关说明,请参阅pip文档 需求文件格式,和 Pinax项目 对于一个非常好的项目的例子。


3
2018-04-04 08:18



谢谢丹尼尔,但我希望不必分发为用户执行此操作的bash脚本(以及我需要安装virtualenv的sudo命令)? - malangi
我没有说bash或sudo。 - Daniel Roseman


答案:


建设 - 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.py 和 bin/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 如果这看起来太可怕 - 查找谷歌(查询 python egg)。在我看来,它实际上比buildout更简单(绝对更容易调试),并且它可能更有用,因为它可以更容易地分发并在virtualenv或全局的帮助下安装在任何地方,在buildout中你必须提供所有的始终使用源代码构建脚本。


5
2018-04-04 08:23





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

以我的身份为例 日志查看 package,依赖于PyQt4和ZeroMQ,包括使用PyInstaller创建的Linux,Mac OSX和Windows的发行版。


4
2018-04-04 08:17





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

有关说明,请参阅pip文档 需求文件格式,和 Pinax项目 对于一个非常好的项目的例子。


3
2018-04-04 08:18



谢谢丹尼尔,但我希望不必分发为用户执行此操作的bash脚本(以及我需要安装virtualenv的sudo命令)? - malangi
我没有说bash或sudo。 - Daniel Roseman