如何使用virtualenv分发Python代码?

14 投票
3 回答
18082 浏览
提问于 2025-04-16 15:02

我想把一些Python代码分发到只安装了基本Python的机器上,这些用户对easy_install等工具不太熟悉。

我在想,是否可以用virtualenv来实现这个目的?我应该能写一些bash脚本来启动virtualenv(并安装合适的包),然后运行我的代码……不过这样做感觉有点麻烦,我在想这样做是不是在重复造轮子?

有没有什么简单的方法可以分发带有依赖的Python代码,最好是不需要在客户端机器上使用sudo权限?

3 个回答

4

如果你在问是否要分享你的虚拟环境,那是不需要的。不过,你可以使用 pip 来创建一个需求文件,通常叫做 requirements.txt。然后告诉你的用户先创建一个虚拟环境,再运行 pip install -r requirements.txt,这样就能为他们安装所有需要的依赖包了。

想了解需求文件的格式,可以查看 pip 的文档,另外 Pinax 项目 是一个很好的示例,展示了如何做到这一点。

7

你可以使用一个叫做 PyInstaller 的工具来实现这个目的。这样,你的应用程序在所有平台上都会显示为一个独立的可执行文件,并且会包含所有需要的依赖项。用户甚至不需要安装Python!

举个例子,我的 logview 包就使用了PyInstaller,它依赖于PyQt4和ZeroMQ,并且为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 bootstrap.pybin/buildout。虽然可以在本地安装buildout,但我不推荐这样做,最好使用bootstrap下载的版本。

我必须承认,buildout并不是最简单的解决方案,但它确实很强大。所以,花时间去学习是值得的。

更新 2014-05-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相关的链接集合”部分,里面可能有对你项目有帮助的信息。

其次,我个人更倾向于使用setup.py脚本,这个脚本可以通过python安装。关于egg结构的更多信息可以在这里找到:http://peak.telecommunity.com/DevCenter/PythonEggs,如果这些看起来太复杂,可以在谷歌上搜索python egg。在我看来,这实际上比buildout简单得多(绝对更容易调试),而且可能更有用,因为它可以更容易地分发,并且可以在任何地方安装,借助virtualenv或全局安装,而使用buildout时,你必须始终提供所有构建脚本和源代码。

撰写回答