#3307·redis-py

ResponseError: Missing library metadata

Author: eromoeCreated Jul 9, 2024Updated Aug 4, 2026

Version: redis-5.0.7 Platform: Python 3.9 on Windows 10 Description:

docs: https://redis.io/docs/latest/commands/function-load/

redis-cli is fine

create redis from docker

bash
docker run -d --name redis_ts3 -p 16379:6379 redis/redis-stack-server
docker exec -it redis_ts3 /bin/bash && redis-cli

Add function without error

127.0.0.1:6379> FUNCTION LOAD "#!lua name=mylib \n redis.register_function('myfunc', function(keys, args) return args[1] end)"
"mylib"
127.0.0.1:6379>

redis-py raise error

python
import redis

settings = {
    'host': 'localhost',
    'port': 16379,
    'db': 0,
    'password': None,
}

r = redis.Redis(**settings)
r.function_load("#!lua name=mylib2 \n redis.register_function('myfunc2', function(keys, args) return args[1] end)")

error:

---------------------------------------------------------------------------
ResponseError                             Traceback (most recent call last)
Cell In[8], line 1
----> 1 r.function_load(
      2 '''
      3 #!lua name=mylib
      4 redis.register_function('myfunc', function(keys, args) return args[1] end)
      5 '''
      6 )

File c:\envs\quant\lib\site-packages\redis\commands\core.py:6014, in FunctionCommands.function_load(self, code, replace)
   6012 pieces = ["REPLACE"] if replace else []
   6013 pieces.append(code)
-> 6014 return self.execute_command("FUNCTION LOAD", *pieces)

File c:\envs\quant\lib\site-packages\redis\client.py:545, in Redis.execute_command(self, *args, **options)
    542 conn = self.connection or pool.get_connection(command_name, **options)
    544 try:
--> 545     return conn.retry.call_with_retry(
    546         lambda: self._send_command_parse_response(
    547             conn, command_name, *args, **options
    548         ),
    549         lambda error: self._disconnect_raise(conn, error),
    550     )
    551 finally:
    552     if not self.connection:

File c:\envs\quant\lib\site-packages\redis\retry.py:46, in Retry.call_with_retry(self, do, fail)
     44 while True:
     45     try:
---> 46         return do()
     47     except self._supported_errors as error:
     48         failures += 1

File c:\envs\quant\lib\site-packages\redis\client.py:546, in Redis.execute_command.<locals>.<lambda>()
    542 conn = self.connection or pool.get_connection(command_name, **options)
    544 try:
    545     return conn.retry.call_with_retry(
--> 546         lambda: self._send_command_parse_response(
    547             conn, command_name, *args, **options
    548         ),
    549         lambda error: self._disconnect_raise(conn, error),
    550     )
    551 finally:
    552     if not self.connection:

File c:\envs\quant\lib\site-packages\redis\client.py:522, in Redis._send_command_parse_response(self, conn, command_name, *args, **options)
    518 """
    519 Send a command and parse the response
    520 """
    521 conn.send_command(*args)
--> 522 return self.parse_response(conn, command_name, **options)

File c:\envs\quant\lib\site-packages\redis\client.py:562, in Redis.parse_response(self, connection, command_name, **options)
    560         options.pop(NEVER_DECODE)
    561     else:
--> 562         response = connection.read_response()
    563 except ResponseError:
    564     if EMPTY_RESPONSE in options:

File c:\envs\quant\lib\site-packages\redis\connection.py:536, in AbstractConnection.read_response(self, disable_decoding, disconnect_on_error, push_request)
    534 if isinstance(response, ResponseError):
    535     try:
--> 536         raise response
    537     finally:
    538         del response  # avoid creating ref cycles

ResponseError: Missing library metadata