Pip3 为所有用户安装模块
Pip3 Install Module For All Users
不确定我是应该在这里还是在 Linux 堆栈溢出时问这个问题,但它就在这里。
我对 python 比较陌生,我一直在努力让这个 python 脚本在 aws 机器上自动启动。我有两个模块需要安装 "discord.py" 和 "watson-cloud-developer"。 pip3 安装上述模块没有错误。当尝试 运行 一个服务 运行 是一个 运行 是 python 脚本的脚本时(一定要喜欢 systemd),我收到一条错误消息,告诉我 discord 模块不是已安装,见下文。
Systemctl error
● 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 proof that discord is installed
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)
我知道 python 脚本写得不是很好,但它们确实有效,目前令人眼花缭乱的障碍完全在于 pip 安装模块的位置,出于某种原因,它们可以' 在被 systemd 运行 访问时被访问。
我怀疑您的启动脚本启动的 Python 与您安装 discord 的启动脚本不同。
尝试添加行,
import sys; print(sys.executable, sys.prefix)
到你的main.py
,在import discord
之前。并在 python3
shell 中尝试 运行ning。这应该打印出 Python 可执行文件和标准库分别安装的位置。如果它们在 main.py
中与在 shell 中不同,那是你的问题。
也试试
$ which python3
$ which pip3
一旦您知道 Python 可执行文件的路径,您实际上是 运行ning,您可以将 Python 的 pip 与
一起使用
$ foo -m pip install discord
其中 foo
是您在 main.py
.
中使用 sys.executable
打印的 Python 可执行文件的完整路径
您也可以尝试将 discord
安装到虚拟环境。
$ python3 -m venv foo
$ source foo/bin/activate
$ pip install discord # install all your other requirements too
其中 foo
是您可以将虚拟环境安装到的路径。然后在您的启动脚本中,在 运行ning main.py
之前激活源。这确保 python 将 运行 在您刚刚创建的相同 foo
环境中。
#!/bin/bash
source foo/bin/activate
python /home/ubuntu/discordBot/main.py
请注意,在活动的虚拟环境中,您使用 python
和 pip
,即使您使用 python3
创建了环境。
不确定我是应该在这里还是在 Linux 堆栈溢出时问这个问题,但它就在这里。
我对 python 比较陌生,我一直在努力让这个 python 脚本在 aws 机器上自动启动。我有两个模块需要安装 "discord.py" 和 "watson-cloud-developer"。 pip3 安装上述模块没有错误。当尝试 运行 一个服务 运行 是一个 运行 是 python 脚本的脚本时(一定要喜欢 systemd),我收到一条错误消息,告诉我 discord 模块不是已安装,见下文。
Systemctl error
● 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 proof that discord is installed
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)
我知道 python 脚本写得不是很好,但它们确实有效,目前令人眼花缭乱的障碍完全在于 pip 安装模块的位置,出于某种原因,它们可以' 在被 systemd 运行 访问时被访问。
我怀疑您的启动脚本启动的 Python 与您安装 discord 的启动脚本不同。
尝试添加行,
import sys; print(sys.executable, sys.prefix)
到你的main.py
,在import discord
之前。并在 python3
shell 中尝试 运行ning。这应该打印出 Python 可执行文件和标准库分别安装的位置。如果它们在 main.py
中与在 shell 中不同,那是你的问题。
也试试
$ which python3
$ which pip3
一旦您知道 Python 可执行文件的路径,您实际上是 运行ning,您可以将 Python 的 pip 与
一起使用$ foo -m pip install discord
其中 foo
是您在 main.py
.
sys.executable
打印的 Python 可执行文件的完整路径
您也可以尝试将 discord
安装到虚拟环境。
$ python3 -m venv foo
$ source foo/bin/activate
$ pip install discord # install all your other requirements too
其中 foo
是您可以将虚拟环境安装到的路径。然后在您的启动脚本中,在 运行ning main.py
之前激活源。这确保 python 将 运行 在您刚刚创建的相同 foo
环境中。
#!/bin/bash
source foo/bin/activate
python /home/ubuntu/discordBot/main.py
请注意,在活动的虚拟环境中,您使用 python
和 pip
,即使您使用 python3
创建了环境。