如何在sudo中使用python virtualenv?

我试图在不在/ home下的目录中创建一个与系统(使用virtualenv)分离的python环境,因为我需要使用它来构建其他必须可供多个用户访问的软件。 我可以创建并激活virtualenv,但是当我sudo一些命令(例如制作或编译其他软件)时,它是使用的系统python(我可以告诉因为可用的模块)。

因为在Ubuntu上使用root用户并不是一件好事,有没有办法告诉sudo使用virtualenv? 或许这可能不是正确的方法,我应该做一个全新的python安装?

我使用的是64位版本的Ubuntu 12.04(和python 2.7)。

问题几乎可以肯定,当你运行sudo ,virtualenv环境变量,别名,函数等不会被转移。

解决方案是使用sudo显式运行虚拟环境的Python可执行文件。 例如,如果你的virtualenv是./AwesomeProject,那么你可以运行sudo ./AwesomeProject/bin/python 来使用带有root权限的virtualenv的脚本。

只是偶然发现了这个问题,对于可能发现同样问题的其他人来说,肯是正确的,因为env变量没有被转移。 我使用的解决方案是将以下行添加到我的脚本中。 这具有始终直接从脚本加载虚拟环境的额外好处。 (这意味着您可以将脚本与crontab或launchd一起使用,而无需任何其他解决方法。)

 base_dir = os.path.dirname(os.path.abspath(__file__)) activate_this = os.path.join(base_dir, 'venv/bin/activate_this.py') execfile(activate_this, dict(__file__=activate_this)) 

更多背景信息: https : //virtualenv.pypa.io/en/latest/userguide.html#using-virtualenv-without-bin-python

有时你需要更新$ PATH,因为脚本运行其他程序。 例如,pypi-install需要在PATH中使用py2dsc-deb。 此命令有效: sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"