须藤还是不须藤?

时间:2018-08-14 22:47:59

标签: linux python-3.x bash redhat sudo

最终目标是在redhat机器上的shell脚本中运行此命令。我已经在ubuntu机器上使用了多年的脚本,但是我在redhat上的特权较少。我将在下面描述我尝试的解决方案,但想首先提出问题。

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

在redhat中,我必须以sudo的身份安装python / pip3.5 ...像这样...

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__'

所以我尝试将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")

在命令行上表现出色!

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

sudo: python3: command not found

我已经尝试过各种方法...将'sudo'别名放入脚本中...将其放入/root/.bashrc ...其他一些随机的事情。

在这一点上,我怀疑我也可以以sudo的身份运行bash脚本...但这开始引起其他各种问题,我怀疑这是一种非常糟糕的安全实践。我觉得自己已经脱离轨道,这里有一些更聪明的解决方案。

任何一个想法

  • 如何在不使用sudo的情况下运行python3.5并使其正常工作
  • 如何在不以sudo身份运行外壳脚本的情况下使sudo python3在外壳脚本中工作?

预先感谢

编辑

根据@JulianLoaiza和@TerryCarmen的以下建议,chown -R允许我在没有sudo的情况下运行python3 ...但是当我这样做时,boto3不再授权我。检查sys.path与python的观点只有一个不同...

  • sudo具有:'/root/.local/lib/python3.5/site-packages'
  • 不带sudo的设备有:'/home/ec2-user/.local/lib/python3.5/site-packages'

两个都有'/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”身份登录时,在/home/ec2-user/.local/lib/python3.5/site-packages之前查找/usr/lib/python3.5/site-packages会引起python的困惑吗?

2 个答案:

答案 0 :(得分:1)

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

sudo chown -R ec2-user:ec2-user /usr/lib/python2.7
sudo chown -R ec2-user:ec2-user /usr/lib64/python2.7

答案 1 :(得分:1)

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。这不是一个好习惯,但归根结底,它们是您的系统和您的决定。