Pip3 Установить модуль для всех пользователей - PullRequest
0 голосов
/ 03 марта 2019

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

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

Ошибка 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 доказательство того, что дискорд установлен

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

сценарий bash:

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

сценарии Python:

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)

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

1 Ответ

0 голосов
/ 03 марта 2019

Я подозреваю, что ваши загрузочные скрипты запускают другой 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.

...