最终目标是在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
在外壳脚本中工作?预先感谢
编辑
根据@JulianLoaiza和@TerryCarmen的以下建议,chown -R
允许我在没有sudo
的情况下运行python3 ...但是当我这样做时,boto3不再授权我。检查sys.path
与python的观点只有一个不同...
'/root/.local/lib/python3.5/site-packages'
'/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的困惑吗?
答案 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。这不是一个好习惯,但归根结底,它们是您的系统和您的决定。