我使用的是64位Centos 5 Linux。这附带Python2.4,但我需要2.6或更高才能获得psycopg2。我安装了一个虚拟环境来运行Python2.7.3(基于这个http://toomuchdata.com/2012/06/25/how-to-install-python-2-7-3-on-centos-6-2/)现在,当我以root用户身份登录时似乎运行良好。
但我需要能够将virtualenv用作非root用户joshmoe。 (并以其他用户身份启动/停止postgresql)
进入virtualenv的命令是:
source /root/Python-2.7.3/projectdir/bin/activate
可以理解的是,当我以joshmoe的身份运行此命令时,我收到了一条权限被拒绝的消息:
-bash: /root/Python-2.7.3/projectdir/bin/activate: Permission denied
为了让这个命令对joshmoe可用,我编辑了/ etc / sudoers以包含以下行:
joshmoe ALL=NOPASSWD: /root/Python-2.7.3/projectdir/bin/activate
现在从joshmoe登录,当我跑:
sudo source /root/Python-2.7.3/projectdir/bin/activate
我得到以下内容:
sudo: source: command not found
我似乎很清楚我没有正确使用sudoers文件来指定源文件 - 我似乎成功地访问了'activate'文件,但没有使用内置的源函数。以下任一行都会在sudoers中出现语法错误:
joshmoe ALL=NOPASSWD: source
joshmoe ALL=NOPASSWD: source /root/Python-2.7.3/projectdir/bin/activate
我发现了许多颤抖声明的例子。但是,我无法弄清楚将使这项工作的语法。我希望一旦我得到这个,我将能够访问诸如'service postgresql status'等语句。
答案 0 :(得分:0)
您的问题是您的用户没有root访问您的virutalenv目录。您需要授予用户访问权限,例如使用:
sudo chmod o+x /root # grant access to root directory
sudo chmod o+rX /root/Python-2.7.3 -R # recursively grant access to everything in Python-2.7.3
source
不是程序,它是一个shell butiltin,它导致脚本在当前shell中获取。 sudo
只能执行程序,而不是shell内置函数,函数或别名,这就是你得到错误的原因。
答案 1 :(得分:0)
您无法像source
一样运行sudo source
;它是bash的内置命令,而不是程序。你想在这里做的可能是使用sudo -s
作为超级用户启动一个新的shell。