使用virtualenv分发Python代码?

14

我想要分发一些Python代码,其中包含一些外部依赖项,但是目标机器只安装了核心Python(且用户对easy_install等工具不熟悉)。

我在想,也许可以使用virtualenv来实现此目的?我应该能够编写一些bash脚本来触发虚拟环境(包括所需的软件包),然后运行我的代码... 但这似乎有点混乱,我想知道是否有更好的解决方案?

有没有简单的解决方案可以分发带有依赖项的Python代码,理想情况下不需要在客户机上使用sudo

3个回答

6
你可以使用像PyInstaller这样的工具来实现此目的。您的应用程序将在所有平台上显示为单个可执行文件,并包括依赖项。用户甚至不需要安装Python!
以我的logview包为例,它依赖于PyQt4和ZeroMQ,并使用PyInstaller创建了Linux、Mac OSX和Windows的分发版本。

6

Buildout - http://pypi.python.org/pypi/zc.buildout
看一下我的干净项目:http://hg.jackleo.info/hyde-0.5.3-buildout-enviroment/src 它只有两个文件可以完成,Makefile是可选的,但你需要bootstrap.py(Makefile会下载它,但仅在Linux上运行)。buildout.cfg是主要文件,您可以在其中编写依赖项和项目布局的配置。
要获取bootstrap.py,只需从http://svn.zope.org/repos/main/zc.buildout/trunk/bootstrap/bootstrap.py下载即可。
然后运行python bootstap.pybin/buildout。虽然可以将buildout安装到本地,但我不建议这样做,只需使用bootstrap下载的一个即可。

我必须承认,buildout并非最简单的解决方案,但其确实非常强大。因此学习它值得花费时间。

更新于2014年5月30日
由于最近有人点赞并将其用作答案(可能),我想通知一下几个变化。

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

那个Hyde项目可能会因为buildout 2的破坏性变化而失败。

在这里,你可以找到更好的示例 http://www.buildout.org/en/latest/docs/index.html 我还建议看一下“与Buildout相关的链接集合”部分,它可能包含您项目的信息。

其次,我个人更喜欢使用可以使用Python安装的setup.py脚本。关于egg结构的更多信息可以在这里找到http://peak.telecommunity.com/DevCenter/PythonEggs,如果看起来太可怕,请查阅谷歌(查询python egg)。在我看来,它比buildout更简单(肯定更容易调试),而且它可能更有用,因为它可以更轻松地分发和安装,可以在虚拟环境或全局范围内安装,在buildout中,您必须始终提供所有构建脚本与源代码。

4
你不想分发你的虚拟环境,如果这是你的问题。但你可以使用pip创建一个要求文件——通常称为requirements.txt——并告诉你的用户创建一个虚拟环境,然后运行pip install -r requirements.txt,它将为他们安装所有的依赖项。 请参阅pip文档了解要求文件格式的描述,以及Pinax项目作为一个非常好的示例。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接