须藤还是不须藤?

sudo or not sudo?

最终目标是 运行 从 redhat 机器上的 shell 脚本中的这个单一命令。我在 ubuntu 机器上使用该脚本多年,但我在 redhat 上的权限较少。我将在下面描述我尝试的解决方案,但我想先提出问题。

read -r val1 val2 val3 <<<$(python3 script_name.py "$json_args")

在 redhat 中,我必须安装 python/pip3.5 作为 sudo...就像这样...

sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
sudo yum -y install python35u
sudo yum -y install python35u-pip
sudo pip3.5 install --upgrade pip

sudo pip3.5 install boto3
sudo pip3.5 install awscli --upgrade --user

不同的机器可能有不同的 python 版本,所以我在 .bash_profile 中为 python3 创建了一个别名,所以相同的 shell 脚本在任何地方都可以工作。

echo 'alias python3="python3.5"' >>~/.bash_profile

现在...一切都被锁定在 python...我可以导入 boto3,但它不可用...从 python3 命令行演示...

>>> import boto3
>>> boto3.__version__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'boto3' has no attribute '__version__'

所以我尝试 运行ning python3 作为 'sudo',但是得到...

sudo: python3: command not found

所以我给 .bashrc 添加了一个别名,就像这样...

echo 'alias sudo="sudo "' >>~/.bashrc

太棒了!现在事情似乎奏效了!我终于可以 运行 我最初想要的命令(见下文)。

sudo python3 script_name.py args

或更具体(注意与我的介绍相比添加的 sudo)...

read -r val1 val2 val3 <<<$(sudo python3 script_name.py "$json_args")

命令行运行良好!

... 直到我尝试将其放入 shell 脚本中。现在我又回到了原来的错误...

sudo: python3: command not found

我尝试了各种方法...将 'sudo ' 别名放入脚本中...将其放入 /root/.bashrc...其他一些随机的东西。

在这一点上,我怀疑我也可以 运行 bash 脚本作为 sudo...但这开始导致各种其他问题,我怀疑这是一个非常糟糕的安全实践。我觉得我已经脱离了 rails,这里有一些更聪明的解决方案。

任何想法

提前致谢

编辑

根据@JulianLoaiza 和@TerryCarmen 的以下建议,chown -R 允许我在没有 sudo 的情况下 运行 python3...但是 boto3 不能'当我这样做时,不要再授权我了。检查 sys.path 从 python 的角度来看只有一个不同......那就是

两者都有 '/usr/lib/python3.5/site-packages',后者出现在最后(并且包含我明确安装的库)。

可能会发生什么.../root/.local/lib/python3.5/site-packages 中没有关于 awscli 或 boto 的内容.../home/ec2-user/.local/lib/python3.5/site-packages 中确实有 'awscli' 和 'botocore' 内容。 /usr/lib/python3.5/site-packages...也是如此,它还有 boto3 和我明确安装的其他库。

当我没有以 'sudo' 身份登录时,python 会不会因为在 /usr/lib/python3.5/site-packages 之前查看 /home/ec2-user/.local/lib/python3.5/site-packages 而感到困惑?

您可以尝试更改文件夹所有权,

sudo chown -R ec2-user:ec2-user /usr/lib/python2.7
sudo chown -R ec2-user:ec2-user /usr/lib64/python2.7
sudo: python3: command not found

找不到您的 python 版本。

您需要指定 python 二进制文件的完整路径:

read -r val1 val2 val3 <<<$(sudo /location/of/your_python script_name.py "$json_args")

一旦你有了它运行,如果python找不到它的依赖项,你可以添加

import sys
sys.path.append('/location/of/your_python_libs')

到您的 python 代码

至于 sudo,您的选择是修复代码、目录和用户,使其不需要 root,或者继续使用 sudo。这不是一个好的做法,但归根结底,它们是您的系统和您的决定。