我想将一些带有一些外部依赖项的 python 代码分发给只安装了核心 python 的机器(以及不熟悉的用户easy_install
等)。
我想知道 virtualenv 是否可以用于此目的?我应该能够编写一些触发 virtualenv(使用合适的包)然后运行我的代码的 bash 脚本。但这似乎有些混乱,我想知道我是否在重新发明轮子?
是否有任何简单的解决方案来分发具有依赖关系的 python 代码,理想情况下不需要sudo
在客户端机器上?
我想将一些带有一些外部依赖项的 python 代码分发给只安装了核心 python 的机器(以及不熟悉的用户easy_install
等)。
我想知道 virtualenv 是否可以用于此目的?我应该能够编写一些触发 virtualenv(使用合适的包)然后运行我的代码的 bash 脚本。但这似乎有些混乱,我想知道我是否在重新发明轮子?
是否有任何简单的解决方案来分发具有依赖关系的 python 代码,理想情况下不需要sudo
在客户端机器上?
为此,您可以使用PyInstaller 之类的工具。您的应用程序将在所有平台上显示为单个可执行文件,并包含依赖项。用户甚至不需要安装 Python!
以我的logview包为例,它依赖于 PyQt4 和 ZeroMQ,并包括所有使用 PyInstaller 创建的 Linux、Mac OSX 和 Windows 的发行版。
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下载,然后
运行. 我不建议在本地安装 buildout,尽管可以,只使用一个引导下载。python bootstap.py
bin/buildout
我必须承认,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 相关的链接集合”部分,它可能包含您项目的信息.
其次,我个人更赞成可以使用 python 安装的 setup.py 脚本。更多关于鸡蛋结构的信息可以在这里http://peak.telecommunity.com/DevCenter/PythonEggs找到,如果这看起来太吓人 - 查找谷歌(查询python egg
)。在我看来,它实际上比 buildout 更简单(肯定更容易调试),而且它可能更有用,因为它可以更容易地分发,并在 virtualenv 的帮助下安装在任何地方,或者在全球范围内,你必须提供所有的 buildout始终使用源代码构建脚本。
你不想分发你的 virtualenv,如果那是你所要求的。但是您可以使用pip
创建一个需求文件 - 通常称为requirements.txt
- 并告诉您的用户创建一个 virtualenv 然后运行pip install -r requirements.txt
,这将为他们安装所有依赖项。
有关需求文件格式的描述,请参阅 pip 文档,并在 Pinax 项目中找到一个很好的项目示例。