微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Linux中创建系统文件时无法加载python软件包

如何解决在Linux中创建系统文件时无法加载python软件包

我创建了一个简单的脚本,用于从python文件向AWS SQS发送消息。我已经导入了boto3软件包并在本地对其进行了测试。 现在,当我尝试创建服务文件并使用它运行它时,它说即使安装了boto3软件包也无法导入boto3(我使用pip Frozen | grep boto3对其进行了重新检查)

这是我的代码

import boto3
import json
AWS_SQS_QUEUE_NAME = "XXXXXXXXX"


class SQSQueue(object):
    def __init__(self,queueName=None):
        self.resource = boto3.resource('sqs',region_name="ap-south-1")
        self.queue = self.resource.get_queue_by_name(QueueName=AWS_SQS_QUEUE_NAME)
        self.QueueName = queueName
    
    def send(self,Message={}):
        data = json.dumps(Message)
        response = self.queue.send_message(MessageBody=data)
        return response
    
if __name__ == '__main__':
    q = SQSQueue(queueName=AWS_SQS_QUEUE_NAME)
    message = {
        "user": "XXXX","timestamp": "2020-03-04 18:06:09"
    }
    
    response = q.send(Message=message)

我的服务文件

[Unit]
Description=Dummy Service
After=multi-user.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/bin/python3 /home/ubuntu/code/sample.py

[Install]
WantedBy=multi-user.target

我还尝试创建一个bash文件并从那里调用python文件,但是它给出了相同的错误

错误

Sep 04 15:31:34 virtualhost systemd[1]: Started Access Service.
Sep 04 15:31:35 virtualhost python3[6877]: Traceback (most recent call last):
Sep 04 15:31:35 virtualhost python3[6877]:   File "/home/ubuntu/code/sample.py",line 1,in <module>
Sep 04 15:31:35 virtualhost python3[6877]:     import boto3
Sep 04 15:31:35 virtualhost python3[6877]: ModuleNotFoundError: No module named 'boto3'
Sep 04 15:31:35 virtualhost systemd[1]: sudoaccess.service: Main process exited,code=exited,status=1/FAILURE
Sep 04 15:31:35 virtualhost systemd[1]: sudoaccess.service: Failed with result 'exit-code'.

解决方法

问题是您以用户软件包的形式安装了boto3,并且您以root的身份运行systemd服务,这就是Python仅能访问系统级软件包的原因。

您有2个选择:

简单的方法是通过以root用户身份运行python3 -m pip install boto3在整个Boto3系统上安装。

或者一种更清洁的部署方式是仅使用所需的库创建一个virtualenv:

python3 -m venv /home/ubuntu/myenv/
source /home/ubuntu/myenv/bin/activate
pip install boto3

然后在服务定义上使用virtualenv:

[Service]
Type=simple
User=ubuntu
Group=ubuntu
ExecStart=/home/ubuntu/myenv/bin/python /home/ubuntu/code/sample.py

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。