Virtualenv下的Fabric:如何获取系统的Python库路径(不是virtualenv Python的库路径)

时间:2013-02-27 15:46:30

标签: python deployment virtualenv fabric

我开始使用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内容传递给构造函数并调用render方法来使用WeasyPrint来生成PDF。这种灵活性很好,因为现在可以将PDF布局用于具有CSS知识的设计师,WeasyPrint可以兼容CSS3。

权衡的是,它取决于一些无法用Pip安装的库(特别是Pango,GdkPixbuf和Cairo)。所以我现在的解决方案是在系统范围内安装它们并将它们符号链接到项目的virtualenv。

我不太喜欢使用virtualenv的--system-site-packages选项,但我想知道为什么它比我的符号链接更好。

1 个答案:

答案 0 :(得分:1)

只需运行一个fabric shell脚本命令任务来询问操作系统的python:

/usr/bin/python -c 'from distutils.sysconfig import get_python_lib;print get_python_lib()'