我开始使用 Fabric 作为 Python 项目的简单部署工具,但是有一项任务需要知道系统 Python 库路径在哪里,才能正确设置一些包符号链接。
所以问题是:如何在我的 fabfile 中获取系统 Python 路径?例如,此 Python 代码返回正确的库路径:
# Without virtualenv activated
>>> from distutils.sysconfig import get_python_lib;
>>> print get_python_lib()
'/usr/lib/python2.7/dist-packages'
# With virtualenv activated
>>> from distutils.sysconfig import get_python_lib;
>>> print get_python_lib()
'/home/mandx/dev/my_project/env/lib/python2.7/site-packages'
就我而言,在 Fabric 中运行任务(并且 virtualenv 处于活动状态)时,我需要知道这两者。
我将解释我对此的需求:我想通过简单地将 HTML 和 CSS 内容传递给构造函数并调用渲染方法来使用WeasyPrint生成 PDF。这种灵活性很好,因为现在可以将 PDF 布局用于具有 CSS 知识的设计师,并且 WeasyPrint 力求与 CSS3 兼容。
权衡是它依赖于一些不能用 Pip 安装的库(特别是 Pango、GdkPixbuf 和 Cairo)。所以我现在的解决方案是在系统范围内安装这些并将它们符号链接到项目的 virtualenv。
我不太喜欢使用 virtualenv--system-site-packages
选项的想法,但我想听听为什么它比我的符号链接想法更好。