Это означает, что наиболее переносимым способом определения реализации методов классов шаблонов является определение их внутри определения класса шаблона.
template < typename ... >
class MyClass
{
int myMethod()
{
// Not just declaration. Add method implementation here
}
};
Я подозреваю, что ваши сценарии запуска запускают 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
.