Модуль установки Pip3 для всех пользователей

Не уверен, должен ли я спрашивать об этом здесь или здесь о переполнении стека Linux, но вот оно.

Я относительно новичок в python, и я изо всех сил пытался заставить этот скрипт python автоматически запускаться на машине aws. У меня есть два модуля, которые мне нужно установить: «discord.py» и «watson-cloud-developer». Pip3 устанавливает вышеупомянутые модули без ошибок. При попытке запустить службу, которая запускает скрипт, который запускает скрипт Python (должен любить systemd), я получаю сообщение об ошибке, сообщающее мне, что модуль разногласий не установлен, см. ниже.

Ошибка Systemctl

    ● discordbot.service
   Loaded: loaded (/etc/systemd/system/discordbot.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2019-03-03 17:16:00 UTC; 6s ago
  Process: 30567 ExecStart=/usr/local/sbin/startbot.sh (code=exited, status=1/FAILURE)
 Main PID: 30567 (code=exited, status=1/FAILURE)

Mar 03 17:16:00 ip-172-31-46-72 systemd[1]: Started discordbot.service.
Mar 03 17:16:00 ip-172-31-46-72 startbot.sh[30567]: Traceback (most recent call last):
Mar 03 17:16:00 ip-172-31-46-72 startbot.sh[30567]:   File "/home/ubuntu/discordBot/main.py", line 1, in <module>
Mar 03 17:16:00 ip-172-31-46-72 startbot.sh[30567]:     import discord
Mar 03 17:16:00 ip-172-31-46-72 startbot.sh[30567]: ModuleNotFoundError: No module named 'discord'
Mar 03 17:16:00 ip-172-31-46-72 systemd[1]: discordbot.service: Main process exited, code=exited, status=1/FAILURE
Mar 03 17:16:00 ip-172-31-46-72 systemd[1]: discordbot.service: Failed with result 'exit-code'.

Python3 подтверждает, что Discord установлен

Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import discord
>>>

Я более чем счастлив предоставить любую дополнительную информацию.

РЕДАКТИРОВАНИЕ:

оказание услуг:

[Service]
ExecStart=/usr/local/sbin/startbot.sh

баш скрипт:

#!/bin/bash
python3 /home/ubuntu/discordBot/main.py

питон скрипты:

import json
from watson_developer_cloud import VisualRecognitionV3

visual_recognition = VisualRecognitionV3(
            "2018-03-19",
            iam_apikey="{api-key}")

def ReturnWatsonResults(urlInput):
    classes_result = visual_recognition.classify(url=urlInput).get_result()
    imageResults = dict()

    for images in classes_result['images'][0]['classifiers'][0]['classes']:
        imageResults[images['class']]=str(images['score'] * 100)

    return imageResults

import discord
import watson
from discord.ext.commands import Bot

TOKEN = '{api-key}'

BOT_PREFIX = ("!", "$")

client = Bot(command_prefix=BOT_PREFIX)

@client.command(name="Memealyze",
        description="Send your favorite meme and the boys at IBM will get to work telling you what they see",
        brief="Neural network put to good use",
        pass_context=True)
async def GetMemeContents(context):
    await client.say("Sending image to the mothership, hold tight")

    messageContent = ""
    imageUrl = str(context.message.attachments[0]['url'])
    resultDict = watson.ReturnWatsonResults(imageUrl)

    for key,val in resultDict.items():
        messageContent += (key + ":" + val + "%" + "\n")

    await client.say("Done, the boys at IBM said they found this:\n" + messageContent)

client.run(TOKEN)

Я знаю, что сценарии Python не очень хорошо написаны, но они работают, текущая заминка в головокружении заключается исключительно в том, где pip устанавливает модули, по той или иной причине они не могут быть доступны при запуске systemd .


person Nevo    schedule 03.03.2019    source источник
comment
Пожалуйста, скопируйте/вставьте текст со скриншотов, чтобы сделать этот вопрос доступным для поиска. Не забудьте использовать кнопку форматирования кода.   -  person gilch    schedule 03.03.2019
comment
Как долго эти сценарии запуска? Если они короткие, можете ли вы воспроизвести их здесь?   -  person gilch    schedule 03.03.2019
comment
Просто скрипт bash или вам нужен скрипт python, они оба работают нормально, когда не вызываются systemctl   -  person Nevo    schedule 03.03.2019
comment
Я мог бы также включить услугу, если это необходимо   -  person Nevo    schedule 03.03.2019
comment
Я не могу знать наверняка, не видя их. Тогда начните с bash-скрипта.   -  person gilch    schedule 03.03.2019
comment
#!/bin/bash python3 /home/ubuntu/discordBot/main.py Настолько просто, насколько это возможно, не знаю, почему переполнение стека не регистрирует его, но будьте уверены, что после #!/bin/bash есть новая строка   -  person Nevo    schedule 03.03.2019
comment
Обычно лучше редактировать вопрос с такими многострочными блоками кода. Комментарии не поддерживают такое форматирование.   -  person gilch    schedule 03.03.2019
comment
Хорошо, тогда я это сделаю, в исходный вопрос будут внесены дальнейшие изменения.   -  person Nevo    schedule 03.03.2019


Ответы (1)


Я подозреваю, что ваши сценарии запуска запускают другой Python, чем тот, на который вы установили Discord.

Попробуйте добавить строку,

import sys; print(sys.executable, sys.prefix)

к вашему main.py, до import discord. А также попробуйте запустить это в своей оболочке python3. Это должно распечататься там, где установлены исполняемый файл Python и стандартная библиотека соответственно. Если они отличаются в main.py, чем в оболочке, это ваша проблема.

Также попробуйте

$ which python3
$ which pip3

Как только вы узнаете путь к исполняемому файлу Python, который вы на самом деле запускаете, вы можете использовать этот пип Python с

$ foo -m pip install discord

где foo — это полный путь к исполняемому файлу Python, который вы распечатали с помощью sys.executable в файле main.py.


Вы также можете попробовать установить discord в виртуальную среду.

$ python3 -m venv foo
$ source foo/bin/activate
$ pip install discord  # install all your other requirements too

где foo — это некоторый путь, по которому вы можете установить виртуальную среду. Затем в сценарии запуска активируйте исходный код перед запуском main.py. Это гарантирует, что python будет работать в той же среде foo, которую вы только что создали.

#!/bin/bash
source foo/bin/activate
python /home/ubuntu/discordBot/main.py

Обратите внимание, что в активной виртуальной среде вы используете python и pip, даже если вы создали среду с помощью python3.

person gilch    schedule 03.03.2019
comment
Большое вам спасибо, опробовав начальные команды, которые вы предложили, мои sys.executable и sys.prefix были разными. Попробовав немного повозиться с этим, я отступил и решил попробовать виртуальную среду. Просто так все заработало. Еще раз я не могу отблагодарить вас достаточно. - person Nevo; 04.03.2019