I do not know how to start frappe lms

I don’t know how to install and setup frappe LMS also if there is any kind document to work on step by step
all i did was to initialize the project using

bench init frappe-bench --frappe-branch version-15 --python python3.11
bench start

then

git clone git@github.com:frappe/lms.git

it gives me this error after running this

bench --site lms.local install-app lms

An error occurred while installing lms: (1698, “Access denied for user ‘_4388e30574820a6d’@‘localhost’”)
Traceback with variables (most recent call last):
File “apps/frappe/frappe/commands/site.py”, line 445, in install_app
_install_app(app, verbose=context.verbose, force=force)
context = {‘sites’: [‘lms.local’], ‘force’: False, ‘verbose’: False, ‘profile’: False}
apps = (‘lms’,)
force = False
_install_app = <function install_app at 0x729f9a9e9120>
filelock = <function filelock at 0x729f9a9d6340>
exit_code = 0
site = ‘lms.local’
app = ‘lms’
err = OperationalError(1698, “Access denied for user ‘_4388e30574820a6d’@‘localhost’”)
File “apps/frappe/frappe/installer.py”, line 265, in install_app
frappe.clear_cache()
name = ‘lms’
verbose = False
set_as_patched = True
force = False
sync_jobs = <function sync_jobs at 0x729f99431da0>
sync_for = <function sync_for at 0x729f99432de0>
sync_customizations = <function sync_customizations at 0x729f9a96ab60>
sync_fixtures = <function sync_fixtures at 0x729f99432fc0>
File “apps/frappe/frappe/init.py”, line 1017, in clear_cache
for key in frappe.get_hooks(“persistent_cache_keys”):
user = None
doctype = None
frappe = <module ‘frappe’ from ‘apps/frappe/frappe/init.py’>
clear_routing_cache = <function clear_routing_cache at 0x729f982f1760>
keys_to_delete = ********
File “apps/frappe/frappe/init.py”, line 1643, in get_hooks
hooks = _dict(cache.get_value(“app_hooks”, _load_app_hooks))
hook = ‘persistent_cache_keys’
default = ‘_KEEP_DEFAULT_LIST’
app_name = None
File “apps/frappe/frappe/utils/redis_wrapper.py”, line 100, in get_value
val = generator()
self = RedisWrapper<ConnectionPool<Connection<host=127.0.0.1,port=13000,db=0>>>
key = ********
generator = <function _load_app_hooks at 0x729f9b0b02c0>
user = None
expires = False
shared = False
original_key = ********
val = None
File “apps/frappe/frappe/utils/caching.py”, line 57, in wrapper
return_val = func(*args, **kwargs)
args = ()
kwargs = {}
args_key = ********
func = <function _load_app_hooks at 0x729f9b0b0220>
File “apps/frappe/frappe/init.py”, line 1606, in _load_app_hooks
apps = [app_name] if app_name else get_installed_apps(_ensure_on_bench=True)
app_name = None
hooks = {}
types = <module ‘types’ from ‘/usr/lib/python3.11/types.py’>
File “apps/frappe/frappe/utils/caching.py”, line 57, in wrapper
return_val = func(*args, **kwargs)
args = ()
kwargs = {‘_ensure_on_bench’: True}
args_key = ********
func = <function get_installed_apps at 0x729f9b0b0040>
File “apps/frappe/frappe/init.py”, line 1575, in get_installed_apps
installed = json.loads(db.get_global(“installed_apps”) or “”)
_ensure_on_bench = True
File “apps/frappe/frappe/database/database.py”, line 1005, in get_global
return self.get_default(key, user)
self = <frappe.database.mariadb.database.MariaDBDatabase object at 0x729f9a354dd0>
key = ********
user = ‘__global’
File “apps/frappe/frappe/database/database.py”, line 1009, in get_default
d = self.get_defaults(key, parent)
self = <frappe.database.mariadb.database.MariaDBDatabase object at 0x729f9a354dd0>
key = ********
parent = ‘__global’
File “apps/frappe/frappe/database/database.py”, line 1025, in get_defaults
defaults = frappe.defaults.get_defaults_for(parent)
key = ********
parent = ‘__global’
File “apps/frappe/frappe/defaults.py”, line 240, in get_defaults_for
.run(as_dict=True)
parent = ‘__global’
defaults = None
table = Table(‘tabDefaultValue’)
File “apps/frappe/frappe/query_builder/utils.py”, line 87, in execute_query
result = frappe.db.sql(query, params, *args, **kwargs) # nosemgrep
query = ‘SELECT defkey,defvalue FROM tabDefaultValue WHERE parent=%(param1)s ORDER BY creation
args = ()
kwargs = {‘as_dict’: True}
child_queries =
params = {‘param1’: ‘__global’}
execute_child_queries = <function patch_query_execute..execute_child_queries at 0x729f99972340>
prepare_query = <function patch_query_execute..prepare_query at 0x729f999723e0>
File “apps/frappe/frappe/database/database.py”, line 211, in sql
self.connect()
self = <frappe.database.mariadb.database.MariaDBDatabase object at 0x729f9a354dd0>
query = ‘SELECT defkey,defvalue FROM tabDefaultValue WHERE parent=%(param1)s ORDER BY creation
values = {‘param1’: ‘__global’}
as_dict = True
as_list = 0
debug = False
ignore_ddl = 0
auto_commit = 0
update = None
explain = False
run = True
pluck = False
as_iterator = False
File “apps/frappe/frappe/database/database.py”, line 117, in connect
self._conn: “MariadbConnection” | “PostgresConnection” = self.get_connection()
self = <frappe.database.mariadb.database.MariaDBDatabase object at 0x729f9a354dd0>
File “apps/frappe/frappe/database/mariadb/database.py”, line 107, in get_connection
conn = self._get_connection()
self = <frappe.database.mariadb.database.MariaDBDatabase object at 0x729f9a354dd0>
File “apps/frappe/frappe/database/mariadb/database.py”, line 113, in _get_connection
return self.create_connection()
self = <frappe.database.mariadb.database.MariaDBDatabase object at 0x729f9a354dd0>
File “apps/frappe/frappe/database/mariadb/database.py”, line 116, in create_connection
return pymysql.connect(self.get_connection_settings())
self = <frappe.database.mariadb.database.MariaDBDatabase object at 0x729f9a354dd0>
File “env/lib/python3.11/site-packages/pymysql/connections.py”, line 361, in init
self.connect()
self = <pymysql.connections.Connection object at 0x729f9afcd510>
user = ‘_4388e30574820a6d’
password = ********
host = ‘127.0.0.1’
database = ‘_4388e30574820a6d’
unix_socket = None
port = 3306
charset = ‘utf8mb4’
collation = None
sql_mode = None
read_default_file = None
conv = {<class ‘bool’>: <function escape_bool at 0x729f9a319e40>, <class ‘int’>: <function escape_int at 0x729f9a319ee0>, <class ‘float’>: <function escape_float at 0x729f9a319f80>, <class ‘str’>: <function escape_str at 0x729f9a31a200>, <class ‘bytes’>: <function escape_bytes at 0x729f9a31a160>, <class ‘tuple’>: <function escape_sequence at 0x729f9a319d00>, <class ‘list’>: <function escape_sequence at 0x729f9a319d00>, <class ‘set’>: <function escape_sequence at 0x729f9a319d00>, <class ‘frozenset’>: <function escape_sequence at 0x729f9a319d00>, <class ‘dict’>: <function escape_dict at 0x729f9a319c60>, <class ‘NoneType’>: <function escape_None at 0x729f9a31a2a0>, <class ‘datetime.date’>: <function escape_date at 0x729f9a31a520>, <class ‘datetime.datetime’>: <function escape_datetime at 0x729f9a31a480>, <class ‘datetime.timedelta’>: <function escape_timedelta at 0x729f9a31a340>, <class ‘datetime.time’>: <function escape_time at 0x729f9a31a3e0>, <class ‘time.struct_time’>: <function escape_struc…
use_unicode = True
client_flag = 3842573
cursorclass = <class ‘pymysql.cursors.Cursor’>
init_command = None
connect_timeout = 10
read_default_group = None
autocommit = False
local_infile = False
max_allowed_packet = 16777216
defer_connect = False
auth_plugin_map = None
read_timeout = None
write_timeout = None
bind_address = None
binary_prefix = False
program_name = None
server_public_key = ********
ssl = None
ssl_ca = None
ssl_cert = None
ssl_disabled = None
ssl_key = ********
ssl_key_password = ********
ssl_verify_cert = None
ssl_verify_identity = None
compress = None
named_pipe = None
passwd = ********
db = None
File “env/lib/python3.11/site-packages/pymysql/connections.py”, line 669, in connect
self._request_authentication()
self = <pymysql.connections.Connection object at 0x729f9afcd510>
sock = <socket.socket [closed] fd=-1, family=2, type=1, proto=6>
kwargs = {}
File “env/lib/python3.11/site-packages/pymysql/connections.py”, line 957, in _request_authentication
auth_packet = self._read_packet()
self = <pymysql.connections.Connection object at 0x729f9afcd510>
charset_id = 45
data_init = b’\r\xa2:\x00\xff\xff\xff\x00-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’
data = b"\r\xa2:\x00\xff\xff\xff\x00-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_4388e30574820a6d\x00\x14\x10\x07\xea\xcb\x85\xcaQ\x12
\xb6k\xc5’\x1ck\xb9\x07\x12\xb7V_4388e30574820a6d\x00mysql_native_password\x006\x0c_client_name\x07pymysql\x0f_client_version\x051.1.1\x04_pid\x0535764"
authresp = b"\x10\x07\xea\xcb\x85\xcaQ\x12
\xb6k\xc5’\x1ck\xb9\x07\x12\xb7V"
plugin_name = b’mysql_native_password’
connect_attrs = b’\x0c_client_name\x07pymysql\x0f_client_version\x051.1.1\x04_pid\x0535764’
k = b’_pid’
v = b’35764’
File “env/lib/python3.11/site-packages/pymysql/connections.py”, line 775, in _read_packet
packet.raise_for_error()
self = <pymysql.connections.Connection object at 0x729f9afcd510>
packet_type = <class ‘pymysql.protocol.MysqlPacket’>
buff = bytearray(b"\xff\xa2\x06#28000Access denied for user '_4388e30574820a6d'@'localhost'“)
packet_header = b’?\x00\x00\x02’
btrl = 63
btrh = 0
packet_number = 2
bytes_to_read = 63
recv_data = b”\xff\xa2\x06#28000Access denied for user ‘_4388e30574820a6d’@‘localhost’"
packet = <pymysql.protocol.MysqlPacket object at 0x729f982da740>
File “env/lib/python3.11/site-packages/pymysql/protocol.py”, line 219, in raise_for_error
err.raise_mysql_exception(self._data)
self = <pymysql.protocol.MysqlPacket object at 0x729f982da740>
errno = 1698
File “env/lib/python3.11/site-packages/pymysql/err.py”, line 150, in raise_mysql_exception
raise errorclass(errno, errval)
data = b"\xff\xa2\x06#28000Access denied for user ‘_4388e30574820a6d’@‘localhost’"
errno = 1698
errval = “Access denied for user ‘_4388e30574820a6d’@‘localhost’”
errorclass = <class ‘pymysql.err.OperationalError’>
pymysql.err.OperationalError: (1698, “Access denied for user ‘_4388e30574820a6d’@‘localhost’”)

Hi @saifsabry:

Steps:

bench init frappe-bench --frappe-branch version-15 --python python3.11
bench new-site yoursiteforlms.localhost
bench use yoursiteforlms.localhost
bench start
bench get-app lms
bench --site yoursiteforlms.localhost install-app lms

Hope this helps.