Skip to main content

Python wrapper around Lua and LuaJIT

Project description

Lupa

logo/logo-220x200.png

Lupa integrates the runtimes of Lua or LuaJIT2 into CPython. It is a partial rewrite of LunaticPython in Cython with some additional features such as proper coroutine support.

For questions not answered here, please contact the Lupa mailing list.

Major features

  • separate Lua runtime states through a LuaRuntime class

  • Python coroutine wrapper for Lua coroutines

  • iteration support for Python objects in Lua and Lua objects in Python

  • proper encoding and decoding of strings (configurable per runtime, UTF-8 by default)

  • frees the GIL and supports threading in separate runtimes when calling into Lua

  • tested with Python 2.7/3.6 and later

  • ships with Lua 5.1, 5.2, 5.3 and 5.4 as well as LuaJIT 2.0 and 2.1 on systems that support it.

  • easy to hack on and extend as it is written in Cython, not C

Why the name?

In Latin, “lupa” is a female wolf, as elegant and wild as it sounds. If you don’t like this kind of straight forward allegory to an endangered species, you may also happily assume it’s just an amalgamation of the phonetic sounds that start the words “Lua” and “Python”, two from each to keep the balance.

Why use it?

It complements Python very well. Lua is a language as dynamic as Python, but LuaJIT compiles it to very fast machine code, sometimes faster than many statically compiled languages for computational code. The language runtime is very small and carefully designed for embedding. The complete binary module of Lupa, including a statically linked LuaJIT2 runtime, only weighs some 800KB on a 64 bit machine. With standard Lua 5.2, it’s less than 600KB.

However, the Lua ecosystem lacks many of the batteries that Python readily includes, either directly in its standard library or as third party packages. This makes real-world Lua applications harder to write than equivalent Python applications. Lua is therefore not commonly used as primary language for large applications, but it makes for a fast, high-level and resource-friendly backup language inside of Python when raw speed is required and the edit-compile-run cycle of binary extension modules is too heavy and too static for agile development or hot-deployment.

Lupa is a very fast and thin wrapper around Lua or LuaJIT. It makes it easy to write dynamic Lua code that accompanies dynamic Python code by switching between the two languages at runtime, based on the tradeoff between simplicity and speed.

Which Lua version?

The binary wheels include different Lua versions as well as LuaJIT, if supported. By default, import lupa uses the latest Lua version, but you can choose a specific one via import:

try:
    import lupa.luajit21 as lupa
except ImportError:
    try:
        import lupa.lua54 as lupa
    except ImportError:
        try:
            import lupa.lua53 as lupa
        except ImportError:
            import lupa

print(f"Using {lupa.LuaRuntime().lua_implementation} (compiled with {lupa.LUA_VERSION})")

Examples

>>> from lupa.lua54 import LuaRuntime
>>> lua = LuaRuntime(unpack_returned_tuples=True)

>>> lua.eval('1+1')
2

>>> lua_func = lua.eval('function(f, n) return f(n) end')

>>> def py_add1(n): return n+1
>>> lua_func(py_add1, 2)
3

>>> lua.eval('python.eval(" 2 ** 2 ")') == 4
True
>>> lua.eval('python.builtins.str(4)') == '4'
True

The function lua_type(obj) can be used to find out the type of a wrapped Lua object in Python code, as provided by Lua’s type() function:

>>> lupa.lua_type(lua_func)
'function'
>>> lupa.lua_type(lua.eval('{}'))
'table'

To help in distinguishing between wrapped Lua objects and normal Python objects, it returns None for the latter:

>>> lupa.lua_type(123) is None
True
>>> lupa.lua_type('abc') is None
True
>>> lupa.lua_type({}) is None
True

Note the flag unpack_returned_tuples=True that is passed to create the Lua runtime. It is new in Lupa 0.21 and changes the behaviour of tuples that get returned by Python functions. With this flag, they explode into separate Lua values:

>>> lua.execute('a,b,c = python.eval("(1,2)")')
>>> g = lua.globals()
>>> g.a
1
>>> g.b
2
>>> g.c is None
True

When set to False, functions that return a tuple pass it through to the Lua code:

>>> non_explode_lua = lupa.LuaRuntime(unpack_returned_tuples=False)
>>> non_explode_lua.execute('a,b,c = python.eval("(1,2)")')
>>> g = non_explode_lua.globals()
>>> g.a
(1, 2)
>>> g.b is None
True
>>> g.c is None
True

Since the default behaviour (to not explode tuples) might change in a later version of Lupa, it is best to always pass this flag explicitly.

Python objects in Lua

Python objects are either converted when passed into Lua (e.g. numbers and strings) or passed as wrapped object references.

>>> wrapped_type = lua.globals().type     # Lua's own type() function
>>> wrapped_type(1) == 'number'
True
>>> wrapped_type('abc') == 'string'
True

Wrapped Lua objects get unwrapped when they are passed back into Lua, and arbitrary Python objects get wrapped in different ways:

>>> wrapped_type(wrapped_type) == 'function'  # unwrapped Lua function
True
>>> wrapped_type(len) == 'userdata'       # wrapped Python function
True
>>> wrapped_type([]) == 'userdata'        # wrapped Python object
True

Lua supports two main protocols on objects: calling and indexing. It does not distinguish between attribute access and item access like Python does, so the Lua operations obj[x] and obj.x both map to indexing. To decide which Python protocol to use for Lua wrapped objects, Lupa employs a simple heuristic.

Pratically all Python objects allow attribute access, so if the object also has a __getitem__ method, it is preferred when turning it into an indexable Lua object. Otherwise, it becomes a simple object that uses attribute access for indexing from inside Lua.

Obviously, this heuristic will fail to provide the required behaviour in many cases, e.g. when attribute access is required to an object that happens to support item access. To be explicit about the protocol that should be used, Lupa provides the helper functions as_attrgetter() and as_itemgetter() that restrict the view on an object to a certain protocol, both from Python and from inside Lua:

>>> lua_func = lua.eval('function(obj) return obj["get"] end')
>>> d = {'get' : 'value'}

>>> value = lua_func(d)
>>> value == d['get'] == 'value'
True

>>> value = lua_func( lupa.as_itemgetter(d) )
>>> value == d['get'] == 'value'
True

>>> dict_get = lua_func( lupa.as_attrgetter(d) )
>>> dict_get == d.get
True
>>> dict_get('get') == d.get('get') == 'value'
True

>>> lua_func = lua.eval(
...     'function(obj) return python.as_attrgetter(obj)["get"] end')
>>> dict_get = lua_func(d)
>>> dict_get('get') == d.get('get') == 'value'
True

Note that unlike Lua function objects, callable Python objects support indexing in Lua:

>>> def py_func(): pass
>>> py_func.ATTR = 2

>>> lua_func = lua.eval('function(obj) return obj.ATTR end')
>>> lua_func(py_func)
2
>>> lua_func = lua.eval(
...     'function(obj) return python.as_attrgetter(obj).ATTR end')
>>> lua_func(py_func)
2
>>> lua_func = lua.eval(
...     'function(obj) return python.as_attrgetter(obj)["ATTR"] end')
>>> lua_func(py_func)
2

Iteration in Lua

Iteration over Python objects from Lua’s for-loop is fully supported. However, Python iterables need to be converted using one of the utility functions which are described here. This is similar to the functions like pairs() in Lua.

To iterate over a plain Python iterable, use the python.iter() function. For example, you can manually copy a Python list into a Lua table like this:

>>> lua_copy = lua.eval('''
...     function(L)
...         local t, i = {}, 1
...         for item in python.iter(L) do
...             t[i] = item
...             i = i + 1
...         end
...         return t
...     end
... ''')

>>> table = lua_copy([1,2,3,4])
>>> len(table)
4
>>> table[1]   # Lua indexing
1

Python’s enumerate() function is also supported, so the above could be simplified to:

>>> lua_copy = lua.eval('''
...     function(L)
...         local t = {}
...         for index, item in python.enumerate(L) do
...             t[ index+1 ] = item
...         end
...         return t
...     end
... ''')

>>> table = lua_copy([1,2,3,4])
>>> len(table)
4
>>> table[1]   # Lua indexing
1

For iterators that return tuples, such as dict.iteritems(), it is convenient to use the special python.iterex() function that automatically explodes the tuple items into separate Lua arguments:

>>> lua_copy = lua.eval('''
...     function(d)
...         local t = {}
...         for key, value in python.iterex(d.items()) do
...             t[key] = value
...         end
...         return t
...     end
... ''')

>>> d = dict(a=1, b=2, c=3)
>>> table = lua_copy( lupa.as_attrgetter(d) )
>>> table['b']
2

Note that accessing the d.items method from Lua requires passing the dict as attrgetter. Otherwise, attribute access in Lua would use the getitem protocol of Python dicts and look up d['items'] instead.

None vs. nil

While None in Python and nil in Lua differ in their semantics, they usually just mean the same thing: no value. Lupa therefore tries to map one directly to the other whenever possible:

>>> lua.eval('nil') is None
True
>>> is_nil = lua.eval('function(x) return x == nil end')
>>> is_nil(None)
True

The only place where this cannot work is during iteration, because Lua considers a nil value the termination marker of iterators. Therefore, Lupa special cases None values here and replaces them by a constant python.none instead of returning nil:

>>> _ = lua.require("table")
>>> func = lua.eval('''
...     function(items)
...         local t = {}
...         for value in python.iter(items) do
...             table.insert(t, value == python.none)
...         end
...         return t
...     end
... ''')

>>> items = [1, None ,2]
>>> list(func(items).values())
[False, True, False]

Lupa avoids this value escaping whenever it’s obviously not necessary. Thus, when unpacking tuples during iteration, only the first value will be subject to python.none replacement, as Lua does not look at the other items for loop termination anymore. And on enumerate() iteration, the first value is known to be always a number and never None, so no replacement is needed.

>>> func = lua.eval('''
...     function(items)
...         for a, b, c, d in python.iterex(items) do
...             return {a == python.none, a == nil,   -->  a == python.none
...                     b == python.none, b == nil,   -->  b == nil
...                     c == python.none, c == nil,   -->  c == nil
...                     d == python.none, d == nil}   -->  d == nil ...
...         end
...     end
... ''')

>>> items = [(None, None, None, None)]
>>> list(func(items).values())
[True, False, False, True, False, True, False, True]

>>> items = [(None, None)]   # note: no values for c/d => nil in Lua
>>> list(func(items).values())
[True, False, False, True, False, True, False, True]

Note that this behaviour changed in Lupa 1.0. Previously, the python.none replacement was done in more places, which made it not always very predictable.

Lua Tables

Lua tables mimic Python’s mapping protocol. For the special case of array tables, Lua automatically inserts integer indices as keys into the table. Therefore, indexing starts from 1 as in Lua instead of 0 as in Python. For the same reason, negative indexing does not work. It is best to think of Lua tables as mappings rather than arrays, even for plain array tables.

>>> table = lua.eval('{10,20,30,40}')
>>> table[1]
10
>>> table[4]
40
>>> list(table)
[1, 2, 3, 4]
>>> dict(table)
{1: 10, 2: 20, 3: 30, 4: 40}
>>> list(table.values())
[10, 20, 30, 40]
>>> len(table)
4

>>> mapping = lua.eval('{ [1] = -1 }')
>>> list(mapping)
[1]

>>> mapping = lua.eval('{ [20] = -20; [3] = -3 }')
>>> mapping[20]
-20
>>> mapping[3]
-3
>>> sorted(mapping.values())
[-20, -3]
>>> sorted(mapping.items())
[(3, -3), (20, -20)]

>>> mapping[-3] = 3     # -3 used as key, not index!
>>> mapping[-3]
3
>>> sorted(mapping)
[-3, 3, 20]
>>> sorted(mapping.items())
[(-3, 3), (3, -3), (20, -20)]

To simplify the table creation from Python, the LuaRuntime comes with a helper method that creates a Lua table from Python arguments:

>>> t = lua.table(10, 20, 30, 40)
>>> lupa.lua_type(t)
'table'
>>> list(t)
[1, 2, 3, 4]
>>> list(t.values())
[10, 20, 30, 40]

>>> t = lua.table(10, 20, 30, 40, a=1, b=2)
>>> t[3]
30
>>> t['b']
2

A second helper method, .table_from(), was added in Lupa 1.1 and accepts any number of mappings and sequences/iterables as arguments. It collects all values and key-value pairs and builds a single Lua table from them. Any keys that appear in multiple mappings get overwritten with their last value (going from left to right).

>>> t = lua.table_from([10, 20, 30], {'a': 11, 'b': 22}, (40, 50), {'b': 42})
>>> t['a']
11
>>> t['b']
42
>>> t[5]
50
>>> sorted(t.values())
[10, 11, 20, 30, 40, 42, 50]

Since Lupa 2.1, passing recursive=True will map data structures recursively to Lua tables.

>>> t = lua.table_from(
...     [
...         # t1:
...         [
...             [10, 20, 30],
...             {'a': 11, 'b': 22}
...         ],
...         # t2:
...         [
...             (40, 50),
...             {'b': 42}
...         ]
...     ],
...     recursive=True
... )
>>> t1, t2 = t.values()
>>> list(t1[1].values())
[10, 20, 30]
>>> t1[2]['a']
11
>>> t1[2]['b']
22
>>> t2[2]['b']
42
>>> list(t1[1].values())
[10, 20, 30]
>>> list(t2[1].values())
[40, 50]

A lookup of non-existing keys or indices returns None (actually nil inside of Lua). A lookup is therefore more similar to the .get() method of Python dicts than to a mapping lookup in Python.

>>> table = lua.table(10, 20, 30, 40)
>>> table[1000000] is None
True
>>> table['no such key'] is None
True

>>> mapping = lua.eval('{ [20] = -20; [3] = -3 }')
>>> mapping['no such key'] is None
True

Note that len() does the right thing for array tables but does not work on mappings:

>>> len(table)
4
>>> len(mapping)
0

This is because len() is based on the # (length) operator in Lua and because of the way Lua defines the length of a table. Remember that unset table indices always return nil, including indices outside of the table size. Thus, Lua basically looks for an index that returns nil and returns the index before that. This works well for array tables that do not contain nil values, gives barely predictable results for tables with ‘holes’ and does not work at all for mapping tables. For tables with both sequential and mapping content, this ignores the mapping part completely.

Note that it is best not to rely on the behaviour of len() for mappings. It might change in a later version of Lupa.

Similar to the table interface provided by Lua, Lupa also supports attribute access to table members:

>>> table = lua.eval('{ a=1, b=2 }')
>>> table.a, table.b
(1, 2)
>>> table.a == table['a']
True

This enables access to Lua ‘methods’ that are associated with a table, as used by the standard library modules:

>>> string = lua.eval('string')    # get the 'string' library table
>>> print( string.lower('A') )
a

Python Callables

As discussed earlier, Lupa allows Lua scripts to call Python functions and methods:

>>> def add_one(num):
...     return num + 1
>>> lua_func = lua.eval('function(num, py_func) return py_func(num) end')
>>> lua_func(48, add_one)
49

>>> class MyClass():
...     def my_method(self):
...         return 345
>>> obj = MyClass()
>>> lua_func = lua.eval('function(py_obj) return py_obj:my_method() end')
>>> lua_func(obj)
345

Lua doesn’t have a dedicated syntax for named arguments, so by default Python callables can only be called using positional arguments.

A common pattern for implementing named arguments in Lua is passing them in a table as the first and only function argument. See http://lua-users.org/wiki/NamedParameters for more details. Lupa supports this pattern by providing two decorators: lupa.unpacks_lua_table for Python functions and lupa.unpacks_lua_table_method for methods of Python objects.

Python functions/methods wrapped in these decorators can be called from Lua code as func(foo, bar), func{foo=foo, bar=bar} or func{foo, bar=bar}. Example:

>>> @lupa.unpacks_lua_table
... def add(a, b):
...     return a + b
>>> lua_func = lua.eval('function(a, b, py_func) return py_func{a=a, b=b} end')
>>> lua_func(5, 6, add)
11
>>> lua_func = lua.eval('function(a, b, py_func) return py_func{a, b=b} end')
>>> lua_func(5, 6, add)
11

If you do not control the function implementation, you can also just manually wrap a callable object when passing it into Lupa:

>>> import operator
>>> wrapped_py_add = lupa.unpacks_lua_table(operator.add)

>>> lua_func = lua.eval('function(a, b, py_func) return py_func{a, b} end')
>>> lua_func(5, 6, wrapped_py_add)
11

There are some limitations:

  1. Avoid using lupa.unpacks_lua_table and lupa.unpacks_lua_table_method for functions where the first argument can be a Lua table. In this case py_func{foo=bar} (which is the same as py_func({foo=bar}) in Lua) becomes ambiguous: it could mean either “call py_func with a named foo argument” or “call py_func with a positional {foo=bar} argument”.

  2. One should be careful with passing nil values to callables wrapped in lupa.unpacks_lua_table or lupa.unpacks_lua_table_method decorators. Depending on the context, passing nil as a parameter can mean either “omit a parameter” or “pass None”. This even depends on the Lua version.

    It is possible to use python.none instead of nil to pass None values robustly. Arguments with nil values are also fine when standard braces func(a, b, c) syntax is used.

Because of these limitations lupa doesn’t enable named arguments for all Python callables automatically. Decorators allow to enable named arguments on a per-callable basis.

Lua Coroutines

The next is an example of Lua coroutines. A wrapped Lua coroutine behaves exactly like a Python coroutine. It needs to get created at the beginning, either by using the .coroutine() method of a function or by creating it in Lua code. Then, values can be sent into it using the .send() method or it can be iterated over. Note that the .throw() method is not supported, though.

>>> lua_code = '''\
...     function(N)
...         for i=0,N do
...             coroutine.yield( i%2 )
...         end
...     end
... '''
>>> lua = LuaRuntime()
>>> f = lua.eval(lua_code)

>>> gen = f.coroutine(4)
>>> list(enumerate(gen))
[(0, 0), (1, 1), (2, 0), (3, 1), (4, 0)]

An example where values are passed into the coroutine using its .send() method:

>>> lua_code = '''\
...     function()
...         local t,i = {},0
...         local value = coroutine.yield()
...         while value do
...             t[i] = value
...             i = i + 1
...             value = coroutine.yield()
...         end
...         return t
...     end
... '''
>>> f = lua.eval(lua_code)

>>> co = f.coroutine()   # create coroutine
>>> co.send(None)        # start coroutine (stops at first yield)

>>> for i in range(3):
...     co.send(i*2)

>>> mapping = co.send(None)   # loop termination signal
>>> sorted(mapping.items())
[(0, 0), (1, 2), (2, 4)]

It also works to create coroutines in Lua and to pass them back into Python space:

>>> lua_code = '''\
...   function f(N)
...         for i=0,N do
...             coroutine.yield( i%2 )
...         end
...   end ;
...   co1 = coroutine.create(f) ;
...   co2 = coroutine.create(f) ;
...
...   status, first_result = coroutine.resume(co2, 2) ;   -- starting!
...
...   return f, co1, co2, status, first_result
... '''

>>> lua = LuaRuntime()
>>> f, co, lua_gen, status, first_result = lua.execute(lua_code)

>>> # a running coroutine:

>>> status
True
>>> first_result
0
>>> list(lua_gen)
[1, 0]
>>> list(lua_gen)
[]

>>> # an uninitialised coroutine:

>>> gen = co(4)
>>> list(enumerate(gen))
[(0, 0), (1, 1), (2, 0), (3, 1), (4, 0)]

>>> gen = co(2)
>>> list(enumerate(gen))
[(0, 0), (1, 1), (2, 0)]

>>> # a plain function:

>>> gen = f.coroutine(4)
>>> list(enumerate(gen))
[(0, 0), (1, 1), (2, 0), (3, 1), (4, 0)]

Threading

The following example calculates a mandelbrot image in parallel threads and displays the result in PIL. It is based on a benchmark implementation for the Computer Language Benchmarks Game.

lua_code = '''\
    function(N, i, total)
        local char, unpack = string.char, table.unpack
        local result = ""
        local M, ba, bb, buf = 2/N, 2^(N%8+1)-1, 2^(8-N%8), {}
        local start_line, end_line = N/total * (i-1), N/total * i - 1
        for y=start_line,end_line do
            local Ci, b, p = y*M-1, 1, 0
            for x=0,N-1 do
                local Cr = x*M-1.5
                local Zr, Zi, Zrq, Ziq = Cr, Ci, Cr*Cr, Ci*Ci
                b = b + b
                for i=1,49 do
                    Zi = Zr*Zi*2 + Ci
                    Zr = Zrq-Ziq + Cr
                    Ziq = Zi*Zi
                    Zrq = Zr*Zr
                    if Zrq+Ziq > 4.0 then b = b + 1; break; end
                end
                if b >= 256 then p = p + 1; buf[p] = 511 - b; b = 1; end
            end
            if b ~= 1 then p = p + 1; buf[p] = (ba-b)*bb; end
            result = result .. char(unpack(buf, 1, p))
        end
        return result
    end
'''

image_size = 1280   # == 1280 x 1280
thread_count = 8

from lupa import LuaRuntime
lua_funcs = [ LuaRuntime(encoding=None).eval(lua_code)
              for _ in range(thread_count) ]

results = [None] * thread_count
def mandelbrot(i, lua_func):
    results[i] = lua_func(image_size, i+1, thread_count)

import threading
threads = [ threading.Thread(target=mandelbrot, args=(i,lua_func))
            for i, lua_func in enumerate(lua_funcs) ]
for thread in threads:
    thread.start()
for thread in threads:
    thread.join()

result_buffer = b''.join(results)

# use Pillow to display the image
from PIL import Image
image = Image.frombytes('1', (image_size, image_size), result_buffer)
image.show()

Note how the example creates a separate LuaRuntime for each thread to enable parallel execution. Each LuaRuntime is protected by a global lock that prevents concurrent access to it. The low memory footprint of Lua makes it reasonable to use multiple runtimes, but this setup also means that values cannot easily be exchanged between threads inside of Lua. They must either get copied through Python space (passing table references will not work, either) or use some Lua mechanism for explicit communication, such as a pipe or some kind of shared memory setup.

Restricting Lua access to Python objects

Lupa provides a simple mechanism to control access to Python objects. Each attribute access can be passed through a filter function as follows:

>>> def filter_attribute_access(obj, attr_name, is_setting):
...     if isinstance(attr_name, unicode):
...         if not attr_name.startswith('_'):
...             return attr_name
...     raise AttributeError('access denied')

>>> lua = lupa.LuaRuntime(
...           register_eval=False,
...           attribute_filter=filter_attribute_access)
>>> func = lua.eval('function(x) return x.__class__ end')
>>> func(lua)
Traceback (most recent call last):
 ...
AttributeError: access denied

The is_setting flag indicates whether the attribute is being read or set.

Note that the attributes of Python functions provide access to the current globals() and therefore to the builtins etc. If you want to safely restrict access to a known set of Python objects, it is best to work with a whitelist of safe attribute names. One way to do that could be to use a well selected list of dedicated API objects that you provide to Lua code, and to only allow Python attribute access to the set of public attribute/method names of these objects.

Since Lupa 1.0, you can alternatively provide dedicated getter and setter function implementations for a LuaRuntime:

>>> def getter(obj, attr_name):
...     if attr_name == 'yes':
...         return getattr(obj, attr_name)
...     raise AttributeError(
...         'not allowed to read attribute "%s"' % attr_name)

>>> def setter(obj, attr_name, value):
...     if attr_name == 'put':
...         setattr(obj, attr_name, value)
...         return
...     raise AttributeError(
...         'not allowed to write attribute "%s"' % attr_name)

>>> class X(object):
...     yes = 123
...     put = 'abc'
...     noway = 2.1

>>> x = X()

>>> lua = lupa.LuaRuntime(attribute_handlers=(getter, setter))
>>> func = lua.eval('function(x) return x.yes end')
>>> func(x)  # getting 'yes'
123
>>> func = lua.eval('function(x) x.put = "ABC"; end')
>>> func(x)  # setting 'put'
>>> print(x.put)
ABC
>>> func = lua.eval('function(x) x.noway = 42; end')
>>> func(x)  # setting 'noway'
Traceback (most recent call last):
 ...
AttributeError: not allowed to write attribute "noway"

Restricting Lua Memory Usage

Lupa provides a simple mechanism to control the maximum memory usage of the Lua Runtime since version 2.0. By default Lupa does not interfere with Lua’s memory allocation, to opt-in you must set the max_memory when creating the LuaRuntime.

The LuaRuntime provides three methods for controlling and reading the memory usage:

  1. get_memory_used(total=False) to get the current memory usage of the LuaRuntime.

  2. get_max_memory(total=False) to get the current memory limit. 0 means there is no memory limitation.

  3. set_max_memory(max_memory, total=False) to change the memory limit. Values below or equal to 0 mean no limit.

There is always some memory used by the LuaRuntime itself (around ~20KiB, depending on your lua version and other factors) which is excluded from all calculations unless you specify total=True.

>>> from lupa import lua52
>>> lua = lua52.LuaRuntime(max_memory=0)  # 0 for unlimited, default is None
>>> lua.get_memory_used()  # memory used by your code
0
>>> total_lua_memory = lua.get_memory_used(total=True)  # includes memory used by the runtime itself
>>> assert total_lua_memory > 0  # exact amount depends on your lua version and other factors

Lua code hitting the memory limit will receive memory errors:

>>> lua.set_max_memory(100)
>>> lua.eval("string.rep('a', 1000)")   # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
 ...
lupa.LuaMemoryError: not enough memory

LuaMemoryError inherits from LuaError and MemoryError.

Importing Lua binary modules

This will usually work as is, but here are the details, in case anything goes wrong for you.

To use binary modules in Lua, you need to compile them against the header files of the LuaJIT sources that you used to build Lupa, but do not link them against the LuaJIT library.

Furthermore, CPython needs to enable global symbol visibility for shared libraries before loading the Lupa module. This can be done by calling sys.setdlopenflags(flag_values). Importing the lupa module will automatically try to set up the correct dlopen flags if it can find the platform specific DLFCN Python module that defines the necessary flag constants. In that case, using binary modules in Lua should work out of the box.

If this setup fails, however, you have to set the flags manually. When using the above configuration call, the argument flag_values must represent the sum of your system’s values for RTLD_NEW and RTLD_GLOBAL. If RTLD_NEW is 2 and RTLD_GLOBAL is 256, you need to call sys.setdlopenflags(258).

Assuming that the Lua luaposix (posix) module is available, the following should work on a Linux system:

>>> import sys
>>> orig_dlflags = sys.getdlopenflags()
>>> sys.setdlopenflags(258)
>>> import lupa
>>> sys.setdlopenflags(orig_dlflags)

>>> lua = lupa.LuaRuntime()
>>> posix_module = lua.require('posix')     # doctest: +SKIP

Building with different Lua versions

The build is configured to automatically search for an installed version of first LuaJIT and then Lua, and failing to find either, to use the bundled LuaJIT or Lua version.

If you wish to build Lupa with a specific version of Lua, you can configure the following options on setup:

Option

Description

--lua-lib <libfile>

Lua library file path, e.g. --lua-lib /usr/local/lib/lualib.a

--lua-includes <incdir>

Lua include directory, e.g. --lua-includes /usr/local/include

--use-bundle

Use bundled LuaJIT or Lua instead of searching for an installed version.

--no-bundle

Don’t use the bundled LuaJIT/Lua, search for an installed version of LuaJIT or Lua, e.g. using pkg-config.

--no-lua-jit

Don’t use or search for LuaJIT, only use or search Lua instead.

Installing lupa

Building with LuaJIT2

  1. Download and unpack lupa

    http://pypi.python.org/pypi/lupa

  2. Download LuaJIT2

    http://luajit.org/download.html

  3. Unpack the archive into the lupa base directory, e.g.:

    .../lupa-0.1/LuaJIT-2.0.2
  4. Build LuaJIT:

    cd LuaJIT-2.0.2
    make
    cd ..

    If you need specific C compiler flags, pass them to make as follows:

    make CFLAGS="..."

    For trickier target platforms like Windows and MacOS-X, please see the official installation instructions for LuaJIT.

    NOTE: When building on Windows, make sure that lua51.lib is made in addition to lua51.dll. The MSVC build produces this file, MinGW does NOT.

  5. Build lupa:

    python setup.py build_ext -i

    Or any other distutils target of your choice, such as build or one of the bdist targets. See the distutils documentation for help, also the hints on building extension modules.

    Note that on 64bit MacOS-X installations, the following additional compiler flags are reportedly required due to the embedded LuaJIT:

    -pagezero_size 10000 -image_base 100000000

    You can find additional installation hints for MacOS-X in this somewhat unclear blog post, which may or may not tell you at which point in the installation process to provide these flags.

    Also, on 64bit MacOS-X, you will typically have to set the environment variable ARCHFLAGS to make sure it only builds for your system instead of trying to generate a fat binary with both 32bit and 64bit support:

    export ARCHFLAGS="-arch x86_64"

    Note that this applies to both LuaJIT and Lupa, so make sure you try a clean build of everything if you forgot to set it initially.

Building with Lua 5.x

It also works to use Lupa with the standard (non-JIT) Lua runtime. The easiest way is to use the bundled lua submodule:

  1. Clone the submodule:

    $ git submodule update --init third-party/lua
  2. Build Lupa:

    $ python3 setup.py bdist_wheel --use-bundle --with-cython

You can also build it by installing a Lua 5.x package, including any development packages (header files etc.). On systems that use the “pkg-config” configuration mechanism, Lupa’s setup.py will pick up either LuaJIT2 or Lua automatically, with a preference for LuaJIT2 if it is found. Pass the --no-luajit option to the setup.py script if you have both installed but do not want to use LuaJIT2.

On other systems, you may have to supply the build parameters externally, e.g. using environment variables or by changing the setup.py script manually. Pass the --no-luajit option to the setup.py script in order to ignore the failure you get when neither LuaJIT2 nor Lua are found automatically.

For further information, read this mailing list post:

https://www.freelists.org/post/lupa-dev/Lupa-with-normal-Lua-interpreter-Lua-51,2

Installing lupa from packages

Debian/Ubuntu + Lua 5.2

  1. Install Lua 5.2 development package:

    $ apt-get install liblua5.2-dev
  2. Install lupa:

    $ pip install lupa

Debian/Ubuntu + LuaJIT2

  1. Install LuaJIT2 development package:

    $ apt-get install libluajit-5.1-dev
  2. Install lupa:

    $ pip install lupa

Depending on OS version, you might get an older LuaJIT2 version.

OS X + Lua 5.2 + Homebrew

  1. Install Lua:

    $ brew install lua
  2. Install pkg-config:

    $ brew install pkg-config
  3. Install lupa:

    $ pip install lupa

Lupa change log

2.2 (2024-06-02)

  • A new method LuaRuntime.gccollect() was added to trigger the Lua garbage collector.

  • A new context manager LuaRuntime.nogc() was added to temporarily disable the Lua garbage collector.

  • Freeing Python objects from a thread while running Lua code could run into a deadlock.

  • The bundled LuaJIT versions were updated to the latest git branches.

  • Built with Cython 3.0.10.

2.1 (2024-03-24)

  • GH#199: The table_from() method gained a new keyword argument recursive=False. If true, Python data structures will be recursively mapped to Lua tables, taking care of loops and duplicates via identity de-duplication.

  • GH#248: The LuaRuntime methods “eval”, “execute” and “compile” gained new keyword options mode and name that allow constraining the input type and modifying the (chunk) name shown in error messages, following similar arguments in the Lua load() function. See https://www.lua.org/manual/5.4/manual.html#pdf-load

  • GH#246: Loading Lua modules did not work for the version specific Lua modules introduced in Lupa 2.0. It turned out that it can only be enabled for one of them in a given Python run, so it is now left to users to enable it explicitly at need. (original patch by Richard Connon)

  • GH#234: The bundled Lua 5.1 was updated to 5.1.5 and Lua 5.2 to 5.2.4. (patch by xxyzz)

  • The bundled Lua 5.4 was updated to 5.4.6.

  • The bundled LuaJIT versions were updated to the latest git branches.

  • Built with Cython 3.0.9 for improved support of Python 3.12/13.

2.0 (2023-04-03)

  • GH#217: Lua stack traces in Python exception messages are now reversed to match the order of Python stack traces.

  • GH#196: Lupa now ships separate extension modules built with Lua 5.3, Lua 5.4, LuaJIT 2.0 and LuaJIT 2.1 beta. Note that this is build specific and may depend on the platform. A normal Python import cascade can be used.

  • GH#211: A new option max_memory allows to limit the memory usage of Lua code. (patch by Leo Developer)

  • GH#171: Python references in Lua are now more safely reference counted to prevent garbage collection glitches. (patch by Guilherme Dantas)

  • GH#146: Lua integers in Lua 5.3+ are converted from and to Python integers. (patch by Guilherme Dantas)

  • GH#180: The python.enumerate() function now returns indices as integers if supported by Lua. (patch by Guilherme Dantas)

  • GH#178: The Lua integer limits can be read from the module as LUA_MAXINTEGER and LUA_MININTEGER. (patch by Guilherme Dantas)

  • GH#174: Failures while calling the __index method in Lua during a table index lookup from Python could crash Python. (patch by Guilherme Dantas)

  • GH#137: Passing None as a dict key into table_from() crashed. (patch by Leo Developer)

  • GH#176: A new function python.args(*args, **kwargs) was added to help with building Python argument tuples and keyword argument dicts for Python function calls from Lua code.

  • GH#177: Tables that are not sequences raise IndexError when unpacking them. Previously, non-sequential items were simply ignored.

  • GH#179: Resolve some C compiler warnings about signed/unsigned comparisons. (patch by Guilherme Dantas)

  • Built with Cython 0.29.34.

1.14.1 (2022-11-16)

  • Rebuild with Cython 0.29.32 to support Python 3.11.

1.13 (2022-03-01)

  • Bundled Lua source files were missing in the source distribution.

1.12 (2022-02-24)

  • GH#197: Some binary wheels in the last releases were not correctly linked with Lua.

  • GH#194: An absolute file path appeared in the SOURCES.txt metadata of the source distribution.

1.11 (2022-02-23)

  • Use Lua 5.4.4 in binary wheels and as bundled Lua.

  • Built with Cython 0.29.28 to support Python 3.10/11.

1.10 (2021-09-02)

  • GH#147: Lua 5.4 is supported. (patch by Russel Davis)

  • The runtime version of the Lua library as a tuple (e.g. (5,3)) is provided via lupa.LUA_VERSION and LuaRuntime.lua_version.

  • The Lua implementation name and version string is provided as LuaRuntime.lua_implementation.

  • setup.py accepts new command line arguments --lua-lib and --lua-includes to specify the

  • Use Lua 5.4.3 in binary wheels and as bundled Lua.

  • Built with Cython 0.29.24 to support Python 3.9.

1.9 (2019-12-21)

  • Build against Lua 5.3 if available.

  • Use Lua 5.3.5 in binary wheels and as bundled Lua.

  • GH#129: Fix Lua module loading in Python 3.x.

  • GH#126: Fix build on Linux systems that install Lua as “lua52” package.

  • Built with Cython 0.29.14 for better Py3.8 compatibility.

1.8 (2019-02-01)

  • GH#107: Fix a deprecated import in Py3.

  • Built with Cython 0.29.3 for better Py3.7 compatibility.

1.7 (2018-08-06)

  • GH#103: Provide wheels for MS Windows and fix MSVC build on Py2.7.

1.6 (2017-12-15)

  • GH#95: Improved compatibility with Lua 5.3. (patch by TitanSnow)

1.5 (2017-09-16)

  • GH#93: New method LuaRuntime.compile() to compile Lua code without executing it. (patch by TitanSnow)

  • GH#91: Lua 5.3 is bundled in the source distribution to simplify one-shot installs. (patch by TitanSnow)

  • GH#87: Lua stack trace is included in output in debug mode. (patch by aaiyer)

  • GH#78: Allow Lua code to intercept Python exceptions. (patch by Sergey Dobrov)

  • Built with Cython 0.26.1.

1.4 (2016-12-10)

  • GH#82: Lua coroutines were using the wrong runtime state (patch by Sergey Dobrov)

  • GH#81: copy locally provided Lua DLL into installed package on Windows (patch by Gareth Coles)

  • built with Cython 0.25.2

1.3 (2016-04-12)

  • GH#70: eval() and execute() accept optional positional arguments (patch by John Vandenberg)

  • GH#65: calling str() on a Python object from Lua could fail if the LuaRuntime is set up without auto-encoding (patch by Mikhail Korobov)

  • GH#63: attribute/keyword names were not properly encoded if the LuaRuntime is set up without auto-encoding (patch by Mikhail Korobov)

  • built with Cython 0.24

1.2 (2015-10-10)

  • callbacks returned from Lua coroutines were incorrectly mixing coroutine state with global Lua state (patch by Mikhail Korobov)

  • availability of python.builtins in Lua can be disabled via LuaRuntime option.

  • built with Cython 0.23.4

1.1 (2014-11-21)

  • new module function lupa.lua_type() that returns the Lua type of a wrapped object as string, or None for normal Python objects

  • new helper method LuaRuntime.table_from(...) that creates a Lua table from one or more Python mappings and/or sequences

  • new lupa.unpacks_lua_table and lupa.unpacks_lua_table_method decorators to allow calling Python functions from Lua using named arguments

  • fix a hang on shutdown where the LuaRuntime failed to deallocate due to reference cycles

  • Lupa now plays more nicely with other Lua extensions that create userdata objects

1.0.1 (2014-10-11)

  • fix a crash when requesting attributes of wrapped Lua coroutine objects

  • looking up attributes on Lua objects that do not support it now always raises an AttributeError instead of sometimes raising a TypeError depending on the attribute name

1.0 (2014-09-28)

  • NOTE: this release includes the major backwards incompatible changes listed below. It is believed that they simplify the interaction between Python code and Lua code by more strongly following idiomatic Lua on the Lua side.

    • Instead of passing a wrapped python.none object into Lua, None return values are now mapped to nil, making them more straight forward to handle in Lua code. This makes the behaviour more consistent, as it was previously somewhat arbitrary where none could appear and where a nil value was used. The only remaining exception is during iteration, where the first returned value must not be nil in Lua, or otherwise the loop terminates prematurely. To prevent this, any None value that the iterator returns, or any first item in exploded tuples that is None, is still mapped to python.none. Any further values returned in the same iteration will be mapped to nil if they are None, not to none. This means that only the first argument needs to be manually checked for this special case. For the enumerate() iterator, the counter is never None and thus the following unpacked items will never be mapped to python.none.

    • When unpack_returned_tuples=True, iteration now also unpacks tuple values, including enumerate() iteration, which yields a flat sequence of counter and unpacked values.

    • When calling bound Python methods from Lua as “obj:meth()”, Lupa now prevents Python from prepending the self argument a second time, so that the Python method is now called as “obj.meth()”. Previously, it was called as “obj.meth(obj)”. Note that this can be undesired when the object itself is explicitly passed as first argument from Lua, e.g. when calling “func(obj)” where “func” is “obj.meth”, but these constellations should be rare. As a work-around for this case, user code can wrap the bound method in another function so that the final call comes from Python.

  • garbage collection works for reference cycles that span both runtimes, Python and Lua

  • calling from Python into Lua and back into Python did not clean up the Lua call arguments before the innermost call, so that they could leak into the nested Python call or its return arguments

  • support for Lua 5.2 (in addition to Lua 5.1 and LuaJIT 2.0)

  • Lua tables support Python’s “del” statement for item deletion (patch by Jason Fried)

  • Attribute lookup can use a more fine-grained control mechanism by implementing explicit getter and setter functions for a LuaRuntime (attribute_handlers argument). Patch by Brian Moe.

  • item assignments/lookups on Lua objects from Python no longer special case double underscore names (as opposed to attribute lookups)

0.21 (2014-02-12)

  • some garbage collection issues were cleaned up using new Cython features

  • new LuaRuntime option unpack_returned_tuples which automatically unpacks tuples returned from Python functions into separate Lua objects (instead of returning a single Python tuple object)

  • some internal wrapper classes were removed from the module API

  • Windows build fixes

  • Py3.x build fixes

  • support for building with Lua 5.1 instead of LuaJIT (setup.py –no-luajit)

  • no longer uses Cython by default when building from released sources (pass --with-cython to explicitly request a rebuild)

  • requires Cython 0.20+ when building from unreleased sources

  • built with Cython 0.20.1

0.20 (2011-05-22)

  • fix “deallocating None” crash while iterating over Lua tables in Python code

  • support for filtering attribute access to Python objects for Lua code

  • fix: setting source encoding for Lua code was broken

0.19 (2011-03-06)

  • fix serious resource leak when creating multiple LuaRuntime instances

  • portability fix for binary module importing

0.18 (2010-11-06)

  • fix iteration by returning Py_None object for None instead of nil, which would terminate the iteration

  • when converting Python values to Lua, represent None as a Py_None object in places where nil has a special meaning, but leave it as nil where it doesn’t hurt

  • support for counter start value in python.enumerate()

  • native implementation for python.enumerate() that is several times faster

  • much faster Lua iteration over Python objects

0.17 (2010-11-05)

  • new helper function python.enumerate() in Lua that returns a Lua iterator for a Python object and adds the 0-based index to each item.

  • new helper function python.iterex() in Lua that returns a Lua iterator for a Python object and unpacks any tuples that the iterator yields.

  • new helper function python.iter() in Lua that returns a Lua iterator for a Python object.

  • reestablished the python.as_function() helper function for Lua code as it can be needed in cases where Lua cannot determine how to run a Python function.

0.16 (2010-09-03)

  • dropped python.as_function() helper function for Lua as all Python objects are callable from Lua now (potentially raising a TypeError at call time if they are not callable)

  • fix regression in 0.13 and later where ordinary Lua functions failed to print due to an accidentally used meta table

  • fix crash when calling str() on wrapped Lua objects without metatable

0.15 (2010-09-02)

  • support for loading binary Lua modules on systems that support it

0.14 (2010-08-31)

  • relicensed to the MIT license used by LuaJIT2 to simplify licensing considerations

0.13.1 (2010-08-30)

  • fix Cython generated C file using Cython 0.13

0.13 (2010-08-29)

  • fixed undefined behaviour on str(lua_object) when the object’s __tostring() meta method fails

  • removed redundant “error:” prefix from LuaError messages

  • access to Python’s python.builtins from Lua code

  • more generic wrapping rules for Python objects based on supported protocols (callable, getitem, getattr)

  • new helper functions as_attrgetter() and as_itemgetter() to specify the Python object protocol used by Lua indexing when wrapping Python objects in Python code

  • new helper functions python.as_attrgetter(), python.as_itemgetter() and python.as_function() to specify the Python object protocol used by Lua indexing of Python objects in Lua code

  • item and attribute access for Python objects from Lua code

0.12 (2010-08-16)

  • fix Lua stack leak during table iteration

  • fix lost Lua object reference after iteration

0.11 (2010-08-07)

  • error reporting on Lua syntax errors failed to clean up the stack so that errors could leak into the next Lua run

  • Lua error messages were not properly decoded

0.10 (2010-07-27)

0.9 (2010-07-23)

  • fixed Python special double-underscore method access on LuaObject instances

  • Lua coroutine support through dedicated wrapper classes, including Python iteration support. In Python space, Lua coroutines behave exactly like Python generators.

0.8 (2010-07-21)

  • support for returning multiple values from Lua evaluation

  • repr() support for Lua objects

  • LuaRuntime.table() method for creating Lua tables from Python space

  • encoding fix for str(LuaObject)

0.7 (2010-07-18)

  • LuaRuntime.require() and LuaRuntime.globals() methods

  • renamed LuaRuntime.run() to LuaRuntime.execute()

  • support for len(), setattr() and subscripting of Lua objects

  • provide all built-in Lua libraries in LuaRuntime, including support for library loading

  • fixed a thread locking issue

  • fix passing Lua objects back into the runtime from Python space

0.6 (2010-07-18)

  • Python iteration support for Lua objects (e.g. tables)

  • threading fixes

  • fix compile warnings

0.5 (2010-07-14)

  • explicit encoding options per LuaRuntime instance to decode/encode strings and Lua code

0.4 (2010-07-14)

  • attribute read access on Lua objects, e.g. to read Lua table values from Python

  • str() on Lua objects

  • include .hg repository in source downloads

  • added missing files to source distribution

0.3 (2010-07-13)

  • fix several threading issues

  • safely free the GIL when calling into Lua

0.2 (2010-07-13)

  • propagate Python exceptions through Lua calls

0.1 (2010-07-12)

  • first public release

License

Lupa

Copyright (c) 2010-2017 Stefan Behnel. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Lua

(See https://www.lua.org/license.html)

Copyright © 1994–2017 Lua.org, PUC-Rio.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lupa-2.2.tar.gz (7.1 MB view details)

Uploaded Source

Built Distributions

lupa-2.2-pp310-pypy310_pp73-win_amd64.whl (957.9 kB view details)

Uploaded PyPy Windows x86-64

lupa-2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

lupa-2.2-pp310-pypy310_pp73-macosx_11_0_x86_64.whl (840.3 kB view details)

Uploaded PyPy macOS 11.0+ x86-64

lupa-2.2-pp39-pypy39_pp73-win_amd64.whl (957.6 kB view details)

Uploaded PyPy Windows x86-64

lupa-2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

lupa-2.2-pp39-pypy39_pp73-macosx_11_0_x86_64.whl (839.2 kB view details)

Uploaded PyPy macOS 11.0+ x86-64

lupa-2.2-pp38-pypy38_pp73-win_amd64.whl (957.4 kB view details)

Uploaded PyPy Windows x86-64

lupa-2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

lupa-2.2-pp38-pypy38_pp73-macosx_11_0_x86_64.whl (840.7 kB view details)

Uploaded PyPy macOS 11.0+ x86-64

lupa-2.2-pp37-pypy37_pp73-win_amd64.whl (957.2 kB view details)

Uploaded PyPy Windows x86-64

lupa-2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

lupa-2.2-pp37-pypy37_pp73-macosx_11_0_x86_64.whl (840.5 kB view details)

Uploaded PyPy macOS 11.0+ x86-64

lupa-2.2-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12 Windows x86-64

lupa-2.2-cp312-cp312-win32.whl (827.2 kB view details)

Uploaded CPython 3.12 Windows x86

lupa-2.2-cp312-cp312-musllinux_1_1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

lupa-2.2-cp312-cp312-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

lupa-2.2-cp312-cp312-musllinux_1_1_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ ARM64

lupa-2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

lupa-2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

lupa-2.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

lupa-2.2-cp312-cp312-macosx_11_0_x86_64.whl (998.2 kB view details)

Uploaded CPython 3.12 macOS 11.0+ x86-64

lupa-2.2-cp312-cp312-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.12 macOS 11.0+ universal2 (ARM64, x86-64)

lupa-2.2-cp312-cp312-macosx_11_0_arm64.whl (933.6 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

lupa-2.2-cp311-cp311-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.11 Windows x86-64

lupa-2.2-cp311-cp311-win32.whl (819.6 kB view details)

Uploaded CPython 3.11 Windows x86

lupa-2.2-cp311-cp311-musllinux_1_1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

lupa-2.2-cp311-cp311-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

lupa-2.2-cp311-cp311-musllinux_1_1_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ ARM64

lupa-2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

lupa-2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

lupa-2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

lupa-2.2-cp311-cp311-macosx_11_0_x86_64.whl (987.4 kB view details)

Uploaded CPython 3.11 macOS 11.0+ x86-64

lupa-2.2-cp311-cp311-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.11 macOS 11.0+ universal2 (ARM64, x86-64)

lupa-2.2-cp311-cp311-macosx_11_0_arm64.whl (929.7 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

lupa-2.2-cp310-cp310-win_amd64.whl (992.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

lupa-2.2-cp310-cp310-win32.whl (819.5 kB view details)

Uploaded CPython 3.10 Windows x86

lupa-2.2-cp310-cp310-musllinux_1_1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

lupa-2.2-cp310-cp310-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

lupa-2.2-cp310-cp310-musllinux_1_1_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ ARM64

lupa-2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

lupa-2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

lupa-2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

lupa-2.2-cp310-cp310-macosx_11_0_x86_64.whl (983.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

lupa-2.2-cp310-cp310-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.10 macOS 11.0+ universal2 (ARM64, x86-64)

lupa-2.2-cp310-cp310-macosx_11_0_arm64.whl (925.8 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

lupa-2.2-cp39-cp39-win_amd64.whl (993.8 kB view details)

Uploaded CPython 3.9 Windows x86-64

lupa-2.2-cp39-cp39-win32.whl (820.2 kB view details)

Uploaded CPython 3.9 Windows x86

lupa-2.2-cp39-cp39-musllinux_1_1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

lupa-2.2-cp39-cp39-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

lupa-2.2-cp39-cp39-musllinux_1_1_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ ARM64

lupa-2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

lupa-2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

lupa-2.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

lupa-2.2-cp39-cp39-macosx_11_0_x86_64.whl (984.0 kB view details)

Uploaded CPython 3.9 macOS 11.0+ x86-64

lupa-2.2-cp39-cp39-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.9 macOS 11.0+ universal2 (ARM64, x86-64)

lupa-2.2-cp39-cp39-macosx_11_0_arm64.whl (926.6 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

lupa-2.2-cp38-cp38-win_amd64.whl (994.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

lupa-2.2-cp38-cp38-win32.whl (820.7 kB view details)

Uploaded CPython 3.8 Windows x86

lupa-2.2-cp38-cp38-musllinux_1_1_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

lupa-2.2-cp38-cp38-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

lupa-2.2-cp38-cp38-musllinux_1_1_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ ARM64

lupa-2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

lupa-2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

lupa-2.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

lupa-2.2-cp38-cp38-macosx_11_0_x86_64.whl (981.2 kB view details)

Uploaded CPython 3.8 macOS 11.0+ x86-64

lupa-2.2-cp38-cp38-macosx_11_0_arm64.whl (925.5 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

lupa-2.2-cp37-cp37m-win_amd64.whl (985.2 kB view details)

Uploaded CPython 3.7m Windows x86-64

lupa-2.2-cp37-cp37m-win32.whl (813.0 kB view details)

Uploaded CPython 3.7m Windows x86

lupa-2.2-cp37-cp37m-musllinux_1_1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

lupa-2.2-cp37-cp37m-musllinux_1_1_i686.whl (1.2 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

lupa-2.2-cp37-cp37m-musllinux_1_1_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ ARM64

lupa-2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

lupa-2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

lupa-2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.1 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

lupa-2.2-cp37-cp37m-macosx_11_0_x86_64.whl (970.3 kB view details)

Uploaded CPython 3.7m macOS 11.0+ x86-64

lupa-2.2-cp36-cp36m-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.6m Windows x86-64

lupa-2.2-cp36-cp36m-win32.whl (911.1 kB view details)

Uploaded CPython 3.6m Windows x86

lupa-2.2-cp36-cp36m-musllinux_1_1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

lupa-2.2-cp36-cp36m-musllinux_1_1_i686.whl (1.1 MB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

lupa-2.2-cp36-cp36m-musllinux_1_1_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ ARM64

lupa-2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

lupa-2.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ARM64

lupa-2.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (1.1 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

lupa-2.2-cp36-cp36m-macosx_11_0_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.6m macOS 11.0+ x86-64

lupa-2.2-cp27-cp27m-macosx_11_0_x86_64.whl (1.0 MB view details)

Uploaded CPython 2.7m macOS 11.0+ x86-64

File details

Details for the file lupa-2.2.tar.gz.

File metadata

  • Download URL: lupa-2.2.tar.gz
  • Upload date:
  • Size: 7.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2.tar.gz
Algorithm Hash digest
SHA256 665a006bcf8d9aacdfdb953824b929d06a0c55910a662b59be2f157ab4c8924d
MD5 af993ac1284f4e285482fad6ecba484b
BLAKE2b-256 b6133a0d2c231ae39bced22f14ded420915be1b88f030bfd2388900d89a74a4b

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp310-pypy310_pp73-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-pp310-pypy310_pp73-win_amd64.whl
  • Upload date:
  • Size: 957.9 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 47eb46153810e868c543ffc53a3369700998a3e617cfcebf49133a79e6f56432
MD5 e309fbccac035c59bcde7b86c453ec9d
BLAKE2b-256 a924d2b749f0e33484e98ec35ce70c2cb93969d68ec810a3903400b3f312cb48

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 95d712728d36262e0bcffea2ad4b1c3ee6122e4eb16f5a70c2f4750f34580148
MD5 7d2f540c4bb6f717728b1b5100613ded
BLAKE2b-256 101a57d484f80f117a93b7090a87c6a8b2a5b994de4b47ee31c3da88586e3576

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp310-pypy310_pp73-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-pp310-pypy310_pp73-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 840.3 kB
  • Tags: PyPy, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-pp310-pypy310_pp73-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 e4cd8c6f725a5629551ac08979d0631af6bed2564cf87dcae489bcb53bdab808
MD5 28a74746b53da09eadde4f21d3c6ce0a
BLAKE2b-256 cffa6a4ed6fccb57b510f4ecae6db009902bbd79535db8f4b2d68f5039ddf8fb

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp39-pypy39_pp73-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-pp39-pypy39_pp73-win_amd64.whl
  • Upload date:
  • Size: 957.6 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 8ccba6f5cd8bdecf4000531298e6edd803547340752b80fe5b74911fa6119cc8
MD5 3aeb3092511dffedd6100f87f6b6095b
BLAKE2b-256 1367e5ce5d1489866c9d26b41f29dd2b8e4bc07d7edcaa86e7cf03561df5c70d

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 36db930207c15656b9989721ea41ba8c039abd088cc7242bb690aa72a4978e68
MD5 2304119fe4434a68720eb3d7cd579c06
BLAKE2b-256 d7e4b434bc9f14fa4c2683364f106ef7965b0dc7c2f68f46d6d8918df4f8323f

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp39-pypy39_pp73-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-pp39-pypy39_pp73-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 839.2 kB
  • Tags: PyPy, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-pp39-pypy39_pp73-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 ecd1b3a4d8db553c4eaed742843f4b7d77bca795ec9f4292385709bcf691e8a3
MD5 d663084c9c49441590af3edf29d8fbee
BLAKE2b-256 b0f875c11344c3404044c0726842c5bfebbf99bcfa2946c0562c21215458e900

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp38-pypy38_pp73-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-pp38-pypy38_pp73-win_amd64.whl
  • Upload date:
  • Size: 957.4 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-pp38-pypy38_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 4c78b3b7137212a9ef881adca3168a376445da3a7dc322b2416c90a73c81db2c
MD5 7423661b42c703700ab8bb6081a64857
BLAKE2b-256 2b18ab2e29188e66310890e6c02c3743b8cdfa255c796014c9cb1a9c2c556a35

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bfd7e62f3149d10fa3485f4d5143f74b295787708b1974f7fad74b65fb911fa1
MD5 f22208f7fa13da203afde144bde95f3d
BLAKE2b-256 ea33963ef604e2ccbe1df228c84dee880b712b8fba8e0c460d32f2a7cf0ecb8c

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp38-pypy38_pp73-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-pp38-pypy38_pp73-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 840.7 kB
  • Tags: PyPy, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-pp38-pypy38_pp73-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4cdeb4a942068882c9e3751520b6de1b6c21d7c2526a2040755b62c7cb46308f
MD5 57d4230e9ca88b8fe1335a35912fb113
BLAKE2b-256 14a673b3ca93fe5ded0b31bb1d9e9575d156f2b5772425b2f65c5e3a002f62c3

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp37-pypy37_pp73-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-pp37-pypy37_pp73-win_amd64.whl
  • Upload date:
  • Size: 957.2 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-pp37-pypy37_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 502248085d3d2dc74e642f97773367a1929daa24fcf039dd5048acdd5b49a8f9
MD5 d49e438580703d044825906a457d1301
BLAKE2b-256 bca5c14fec83511e7ef019f6ca40cf460b453f2a6a64a4deab2b820db828d9d6

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7141e395325f150321c3caa69178dc70224512e0483e2165d3d1ca375608abb7
MD5 65b331ab351f457d57f4ff265e3393fc
BLAKE2b-256 748565ebb9c879622b0916037a65f7856076376243d86381f5a52afbc90691f7

See more details on using hashes here.

File details

Details for the file lupa-2.2-pp37-pypy37_pp73-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-pp37-pypy37_pp73-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 840.5 kB
  • Tags: PyPy, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-pp37-pypy37_pp73-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 283066c6ef9141a66924854a78619ff16bc2efd324484807be58ca9a8e9b617a
MD5 c72bd6fcedaf50c7636d7460a3a72293
BLAKE2b-256 d1a34d963f4b68d1590086dd620371643503d84dc05a1d74f431856730ec4a31

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8e8ff117eca26f5cedcd2b2467cf56d0c64cfcb804b5083a36d818b57edc4036
MD5 077d2eb9b03e9df489c40e2ea5585a37
BLAKE2b-256 00779a93d4c3998b4820de015b49801f4da44bd4f922b08c98c5bfd912985a61

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-win32.whl.

File metadata

  • Download URL: lupa-2.2-cp312-cp312-win32.whl
  • Upload date:
  • Size: 827.2 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 58a3621579b26ad5a524c1c41623ec551160653e915cf4aa41453f4339821b89
MD5 27b63ff624726df4005348fbb044764c
BLAKE2b-256 2becb11d6452a63e0cf3f2021605a6d1839370dcf504893001db49c870a1d1e9

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp312-cp312-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.12, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 3d3d9e5991861d8ee28709d94e673b89bdea10188b34a155835ba2dbbc7d26a7
MD5 aa92d3adc69e5b941ba6bbc7815b08a5
BLAKE2b-256 3a30397b43a8acffd29401588239331dd3ebc62cc06599497076cd3c1c57365a

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-musllinux_1_1_i686.whl.

File metadata

  • Download URL: lupa-2.2-cp312-cp312-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.12, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 63d5ae8ccbafe0aa0034da32f18fc692963df1b5e1ebf91e76f504de1d5aecff
MD5 acc4c07c224692b0d8882dbedfeb47d5
BLAKE2b-256 d1ee0e0b9f848a75ac2ad4105f2c4cf9e865654f7163067e1dc996d966094270

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: lupa-2.2-cp312-cp312-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.12, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp312-cp312-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 42fd611a099ab1804a8d23154d4c7b2221557c94d34f8964da0dc03760f15d3d
MD5 39d7ee9065a8c3d484b9fd4b5061ac2f
BLAKE2b-256 f9a5a726d10c18bca0be35106166d8ab70c1d6acb031429e47533f614960ff97

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 556779c0c28a2948749817ffd62dec882c834a6445aeff5d31ae862e14eebb21
MD5 90df2705330bbcf2c683314178f4120a
BLAKE2b-256 e2c943d475bcd457aa42f1da2e40603e792e42f2fad7f66be514968581260fb1

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8ab43356bb269ca4f03d25200b7559581cd791fbc631104c3e7d186d3c37221f
MD5 efcb3d3c6c6381781c2bca4e9f9f8e9f
BLAKE2b-256 ce736705216ef717839b199add72efd673c6c9551d2ad495425058d3e2f95700

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 63eff3aa68791b5c9a400f89f18018f4f63b8619adaa603fcd09392b87ca6b9b
MD5 cf7745a1fc9b341ee6e8de53051893b6
BLAKE2b-256 ce7ecbd913765bde8edd43a80793670d66a7523dab17597b06e611cb6bf3e35f

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp312-cp312-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 998.2 kB
  • Tags: CPython 3.12, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0a7bd2841fd41b718d415162ec53b7d00079c27b1c5c1a2f2d0fb8080dd64d73
MD5 d5f57d8ff330490984fb335e2da8398f
BLAKE2b-256 d3f934dc3eea329078b56985c2e69f8dbc1abe51b199e31ce00917408810b389

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

  • Download URL: lupa-2.2-cp312-cp312-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.12, macOS 11.0+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6e8027ad53daa511e4a049eb0eb9f71b46fd2c5be6897fc68d75288b04086d4d
MD5 7910c9694d3fd7c0425fbe0212760e6e
BLAKE2b-256 dc83a0a33435053c43522bb687bbd793eca7ea5eaa272b3413834b7a6aebeeb9

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lupa-2.2-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 933.6 kB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8cd872e16e736a3ecb800e70b4f36a66c794b7d339247712244a515561da4ff5
MD5 62c75aaefd302b28d052a5d2f13ae649
BLAKE2b-256 d6d396454f23fe99ff5aa6c146523a9e6ccff8b52f2f9772fe9dd83cbde858b7

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e2d2b9a6a4ef109b75668e26204f122196f33907ce3ccc80322ca70f84f81598
MD5 7cd4870cd607ec188f47517b02ddad55
BLAKE2b-256 31eb60e1a89002bd4b462e3526fb7fbf7e6cf80b5939093fe7f9983a8366f47b

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-win32.whl.

File metadata

  • Download URL: lupa-2.2-cp311-cp311-win32.whl
  • Upload date:
  • Size: 819.6 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 82077fe962c6e9ae1652e826f58e6250d1daa13c446ba1f4d6b68f16df65db0b
MD5 65306ddf3dca46b577f9a68c0212f14f
BLAKE2b-256 0801425a4060a0ff763f72a86556a2a67e7a1becd930453a01b49e89b5b3e361

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp311-cp311-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.11, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 9180dc7ee5c580cee41d9afac0b7c738cf7f6badf4a1398a6e1921dff155619c
MD5 61f1a66674a7acfdda218fe7767cf547
BLAKE2b-256 9cbaeff3c1105a6d68bfab5dd19dcb12e13979793980062d994af16e06163eda

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

  • Download URL: lupa-2.2-cp311-cp311-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.11, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0318ceb4d1782776bae7495a3bd3d50e57f80115ecbeff1e95d87a4e9411acf2
MD5 42f4e4d9f8b56150bd74be0bf588f650
BLAKE2b-256 75be8edb44cc57fa2c8add53672816aff644bc727910b6bd5d29e050a5b65909

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: lupa-2.2-cp311-cp311-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.11, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp311-cp311-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 08e2bfa98725f7495cef30d42d87fff82795b9b9e76b740521828784b778ade7
MD5 f93e8623d72e3b2bf1ffdfcfe29339e2
BLAKE2b-256 c44110d1caedc538de7124026a48476184a4b15cbbdca89f4f7c73ee5c2f0d70

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b79bef7f48696bf70eff165afa49778470607dce6420b497eb82cfae1af6947
MD5 58628a0dfc1962783a9dc74a9f3b7804
BLAKE2b-256 5ad96aef6132101573a8fc0f0c56e375e7bf08198cc4d6907c3612617b0a1e62

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9cd6afa3f6c998ac55f90b0665266c19100387de55d25af25ef4a35197d29d52
MD5 1cd8cecf07347f8c7dc2ff803ebff18e
BLAKE2b-256 e7660e3cde834218ac36b0ced2d66ef2a7a80ff25996c5f7cade969f046c1348

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 26c3edea3ce6465364af6cc1c134b7f23a3ff919e5e499720acbff01b14b9931
MD5 17ab302b399289c1a94a0ea33f04ba5d
BLAKE2b-256 adce5b81ee4ad839784a5fa4a16ebe2f1e80331369d8cc42082cfa90fc6fd5c1

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp311-cp311-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 987.4 kB
  • Tags: CPython 3.11, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 8c89d8e99f684dfedccbf2f0dbdcc28deb73c4ff0545452f43ec02330dacfe0c
MD5 1a7da6dd4d0f9d6cb02748d7ed78e7e8
BLAKE2b-256 c8ac270e88818359be273ade006d34e664ea5015f2709c6f138f094cb93aba77

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

  • Download URL: lupa-2.2-cp311-cp311-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.11, macOS 11.0+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 011dbc81a790693b5457a0d761b032a8acdcc2945e32ca6ef34a7698bda0b09a
MD5 b915ec4a49fe4d5c3624dd09e351d9eb
BLAKE2b-256 24f2a02ae49bb0e090a0d1b55e2d2ad6878d1c568935cd3b88bdeec03fbc4e22

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lupa-2.2-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 929.7 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 95ee903ab71c3e6498bcd3bca60938a961c84fae47cdf23389a48c73e15dbad2
MD5 a30240c511eda2a70e4862c4096bfea5
BLAKE2b-256 52be2f70af80f200fce49a80c96b4bfb1a2f2ec577024507a4ea81c252975492

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 992.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8494802f789174cd26176e6b408e60e468cda348d4f767562d06991604813f61
MD5 593971e9f29e10c6a3c53fca71db9902
BLAKE2b-256 c9e3c7c46433a03a473cf0302c220b54f0a5ee25995f966ec0d6d83f35a3aa7b

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-win32.whl.

File metadata

  • Download URL: lupa-2.2-cp310-cp310-win32.whl
  • Upload date:
  • Size: 819.5 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 a4f03aa308d949a3f2e4e755ffc6a698d3ea02fccd34014fab496efb99b3d4f4
MD5 f94399a05b769078ebdc15a901bf2cc1
BLAKE2b-256 610b563b115605848d1fd367fe94dc1739c5597667d73513a4e8c502b69e4f44

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp310-cp310-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 18a302810735da688d21e8397c696e68b89dbe3c45a3fdc3406f5c0e55887467
MD5 390c7b774cb08ccb99e7976e0c3da7f1
BLAKE2b-256 b70109877676115ad4fa88c52e036e304dd36b18927f9c145526613aba9e89a7

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

  • Download URL: lupa-2.2-cp310-cp310-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 c725c1832b0c6095583a6a57273e6f33a6b55230f90bcacdf06934ce21ef04e9
MD5 c0636a702e71ee3171d43b5899aaed4b
BLAKE2b-256 93892ff8219712bbf23d5b4304756c391d860c7eb90437a561995fc4fdc2cd97

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: lupa-2.2-cp310-cp310-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp310-cp310-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 c140dd19614e43b76b84295945878cea3cdf7ed34e133b1a8c0e3fa7efc9c6ac
MD5 79b3a399ff4f912a9857253207acb2f2
BLAKE2b-256 1820c4ece049c32730d1d1ea90e107699a63605f5a45b24eced8e4be304db2ad

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a50807c6cc11d3ecf568d964be6708e26d4669d435c76fcb568a98d1dd6e8ae9
MD5 61aa9da0c9c35fea4f1119741a8b0edd
BLAKE2b-256 f9a82b80ac62cfe556dcca0d8132d151fbb39db5c3e80657715f13e9a2a7a1c3

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8555526f03bb41d5aef16d105e8f51da1000d833e90d846448cf745ca6cd72e8
MD5 e24257fb9f9a5b4e603b91c9b35a6ecf
BLAKE2b-256 0cc335684c8189279ecc4e84fa2bc6b160e3a345220f545e285a6960b38d2283

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2242884a5078cd2507f15a162b5faf6f39a1f27654a1cc7db09cdb65b0b599b3
MD5 b44e3f2db7517cfe77ab4261c9e335ba
BLAKE2b-256 48826ace1426854d453de62e3aea9922ffc527f4a2aa4ff09d2aa6ae7253af1f

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp310-cp310-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 983.2 kB
  • Tags: CPython 3.10, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 3b47702b94e9e391052118cbde253f69a0af96ec776f48af74e72f30d740ccc9
MD5 c6d0be4dd899d8513ef88ed5db6550cb
BLAKE2b-256 5d18143dbb1ee9d01e3ce771d282e474adbd514591de64df5df772f767aa2986

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

  • Download URL: lupa-2.2-cp310-cp310-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.10, macOS 11.0+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 e673443dd7f7f0510bb9f4b0dc6bad6932d271b0afdbdc492fa71e9b9eab638d
MD5 d019c98d6e8b3fe72fe8bcf4656221c4
BLAKE2b-256 62fb1fa56d18366f94b7fc417eba3ebf91f3faeeaaf7ecacba5ebcf5144c75ce

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lupa-2.2-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 925.8 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 13062395e716cebe25dfc6dc3738a9eb514bb052b52af25cf502c1fd74affd21
MD5 30e9d8f187960a12236c1d44982d85dc
BLAKE2b-256 4bb8371f2137943f9ae875cce814d2512df70d78504261d75da9ae7b35c4de6b

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 993.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 93216d7ae8bb373a8a388b058960a00eaaa6a01e5e2306a13e65db1024181a62
MD5 426dc0f80a80b55e0cd6f32b98f8a41c
BLAKE2b-256 b1fe67a9a5b9ac7300d6ee7228ce095fff5d7aed8356db30add8c15a03b6666c

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-win32.whl.

File metadata

  • Download URL: lupa-2.2-cp39-cp39-win32.whl
  • Upload date:
  • Size: 820.2 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 9b2b7148a77f60b7b193aec2bd820e89c1ecaab9838ca81c8212e2f972df1a1d
MD5 ed22dcec2200c39f951b3d647cf893fe
BLAKE2b-256 1068ddc55f2e12eedbb780ed4b02bc44055433358485532f1b3873c05d177468

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 756fc6aa5ca3a6b7764c474ef061760c5d38e2dd96c21567ab3c7d4f5ed2c3a7
MD5 6213dd01915f91ec4c127bd589d5d272
BLAKE2b-256 86c372d1ff2481d5af345c1c26e25270cc73b909b7047fc98f4369149d3da4d3

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

  • Download URL: lupa-2.2-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 2518128f38a4608bbc5375404082a3c22c86037639842fb7b1fc2b4f5d2a41e3
MD5 60c47760ccdec17d39a81f8e14189374
BLAKE2b-256 976d946e90113afbb6946965fc6e7e8d9dfcaa6990383da7852ff5d8357d11ba

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: lupa-2.2-cp39-cp39-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp39-cp39-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 9e149fafd20e748818a0b718abc42f099a3cc6debc7c6932564d7e475291f0e2
MD5 fcbf2a4f29aecf0039f671d388b9204e
BLAKE2b-256 6502e027d275034ce5c4d03fc89278dae7f5b68ee4a88f777b96dde7b2d84773

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11193c9e7fe1b82d921991c68a33f5b08c8e0c16d67d173768fc80f8c75d9d52
MD5 1784779c9b8cdbdcac4f19cc2f4672c5
BLAKE2b-256 181f431367bd5299f4b63070b55a72bea6ab05e06f9b9378a6c5a7cc897ffe02

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 10c2c81bc96f2091210aaf046ef22f920581a3e161b3961121171e02595ca6fb
MD5 3210bb4df6194283b9559a9924a1e72b
BLAKE2b-256 e26a2a8b72423cd7bda4b8fa57556477916de5174751c81fca36c6b316c96342

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 10c3bb414fc3a4ba9ac3e57a17ffd4c3d0db6da78c53b6792de5a964b5539e42
MD5 67b5b40cfcf3796b13b8c4ecdffec635
BLAKE2b-256 9700005a9ddadb761038ebd60e6c290f88e035fd5b2c496e1e2310d475b65c45

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp39-cp39-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 984.0 kB
  • Tags: CPython 3.9, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 6bddf06f4f4b2257701e12690c5e951eb6a02b88633b7a43cc160172ff3a88b5
MD5 51487fc10ecbce2db22e8d0881b094da
BLAKE2b-256 c4eb8ae1074ada7c71a444e3b85ca313a12f64b5e63c425298b88d3bf534993c

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-macosx_11_0_universal2.whl.

File metadata

  • Download URL: lupa-2.2-cp39-cp39-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.9, macOS 11.0+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp39-cp39-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 c49d1962478fa6a94b468e0dd6f725034ee690f41ae03217ff4672f370a7a099
MD5 6b9d6ea03aa9f84714e1e7e9f95e4a6b
BLAKE2b-256 26d06941541b89339fa225b1a542fb848dfd9c0fbc703f039448c97b45933dbc

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lupa-2.2-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 926.6 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cda04e655af89824a92b4ca168524e0f526b78da5f39f66103cc3b6a924ef60c
MD5 3a4c40219ffb210e7cff662a3df81320
BLAKE2b-256 c7abf762199983b5b4b4c30f2c41e15df14b6d68e2280950f1304ef5753c36e0

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 994.6 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 3facbd310fc73d3bcdb8cb363df80524ee52ac25b7566d0f0fb8b300b04c3bdb
MD5 7e680ba4f67cdbd71f20cbe0a782244e
BLAKE2b-256 4b2b11a614369e7d110c650eb891216ed92421a25345047eb0f13b80de50a7e2

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-win32.whl.

File metadata

  • Download URL: lupa-2.2-cp38-cp38-win32.whl
  • Upload date:
  • Size: 820.7 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 6c7e418bd39b9e2717654ed52ea55b681247d95139da958603e0766ed138b190
MD5 b0854b186745ac6291fc69a33ed42a08
BLAKE2b-256 274e1d34effabd397c6ca7fd3bf961ae13aed7348e0c127aeb53adc10cbe520e

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 2563d55538ebecab1d8768c77e1972f7768440b8e41aff4466352b942aa50dd1
MD5 0a6fe812d1bbbe46c2c5689080ef30e3
BLAKE2b-256 1258c81c424f8453847bdc8209678b37277576bf3f3bbe9efc8553e182b37c37

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

  • Download URL: lupa-2.2-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 189856225402eab6dc467b77190c5beddc5c004a9cdc5855e7517206f3b380ca
MD5 2aa4644211ec487470fedc53e888c70a
BLAKE2b-256 f27afe486439275f49539cb5be662b33b62bc66037d4034bee897e0f6b49ddc3

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: lupa-2.2-cp38-cp38-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp38-cp38-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 26f2617544e4b8cf2a4c1873e6f4feb7e547f4c06bfd088a24547d37f68a3945
MD5 10fea868ae574d4642b975499273bbf9
BLAKE2b-256 fd7d0f6ad57eb197b900394fcfa8535e74ccec940d7efd40c07d124f55950b6f

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df6e1bdd13f6fbdab2212bf08c24c232653832673c21c10ba576f89770e58686
MD5 1508d192c8b691e0cc73dcfe85cd8d81
BLAKE2b-256 9ee24ea7f74e1f7e2eafff9db4d8662e2a6d900827acae24fc681752be382612

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a63d1bc6a473813c707cf5badbfba081bf7cfbd761d58e1812c9a65a477146f9
MD5 49bfa972120585ca9dec5336c2937253
BLAKE2b-256 3fdcd0cd453af969cc2991fe01512cb650ffe8b4ce9914ce2f19f06079efcf59

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fd1e95d8a399ff379d09358490171965aaa25007ed06488b972df08f1b3df509
MD5 52550b9104308c47974092db14ffce1a
BLAKE2b-256 03838541793719d0b6a7f6aa1870c1769afe3319854b3d9d226c60211ae9e2f7

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp38-cp38-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 981.2 kB
  • Tags: CPython 3.8, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 33a2beebe078e13770eff5d12a22d98a425fff89f87af2155c32769adc0114f1
MD5 ea21d4c466b001d4d8ce4047de2c56aa
BLAKE2b-256 5e39c8eea7292eb672285ba202e5773c28e3cf7182e46d490b248d960b40f591

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lupa-2.2-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 925.5 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cc728fbe6d4e668ad8bec979ef86675387ca640e319ec029e0fc8f2bc9c3d224
MD5 41f5bb09d2dbba8d0e98abbcf8afd44a
BLAKE2b-256 9f5fb7f59954e5a69ae3282b9dc1d335518ec679a731e7206cf58c8809ef5267

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 985.2 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 57662d9653e157872caeaa622d966aa1da7bb8fe8646b63fb1194a3cdb98c417
MD5 6c19e2e9496e8c007e80fb0a0618ea51
BLAKE2b-256 c7c80e6ebea9f8a799c7cc1bb9f1d1f1ea3cebf38fc161b10ea5638b15b883bc

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-win32.whl.

File metadata

  • Download URL: lupa-2.2-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 813.0 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 225bbe9e58881bb92f96c6b43587168ed329b2b37c3236a9883efa681aec9f5a
MD5 14a4f731994ddbb1ea7cd893174d7488
BLAKE2b-256 14cf66342b0e7debc1b7f298a960e121821f3427edf0711572d533bb177942bf

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp37-cp37m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 00bcae88a2123f0cfd34f7206cc2d88008d905ebc065d41797827d046404b09e
MD5 26e10e0a7d7e712837c31d7ba5c83f57
BLAKE2b-256 e49bc53e0d21f769b793028c0a3971f6e16a5cac16d172ebee11bfb5f75a14a1

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: lupa-2.2-cp37-cp37m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b2b911d3890fa93ae3f83c5d806008c3b551941813b39e7605def137a9b9b064
MD5 953555ace77ce8d9d7d51bed229173c1
BLAKE2b-256 96444ee9b8932570b840dcede034f4f2864d047b135d933f74f6ddbaed77e1ab

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: lupa-2.2-cp37-cp37m-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp37-cp37m-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 d2aa0fba09a045f5bcc638ede0f614fcd36339da58b7415a1e66e3590781a4a5
MD5 dcf73de6ea4d735feea08c7933809560
BLAKE2b-256 4cfef315aa9cf3b0576076161335bd6f5786e9971197041a59f8999dcd9615d2

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 704ed8f5a91133a8d62cba2d6fe4f2e43c7ee6f3998484d31abcfc4a57bedd1e
MD5 2c2b5ffdbd89b941ced249da9a00f269
BLAKE2b-256 2bfd6c09476e9d546859194a19b8d6365d75e18ca106f1c670c56c84b7de3fcf

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1cc171b352c187a012bbc5c20692236843e8c123c60569be872cb72bb7edcbd4
MD5 5c35e724fea54880248f9c33715fc847
BLAKE2b-256 8121fa80f2a8f19816f7279042dad182457bfe3bc613b9ae76a69ff108656b0b

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 eed6529c89ea475cbc403ed6e8670f1adf9eb2eb34b7610690d9827d35759a3c
MD5 f08499137efdb19f6ad843c0c2f9a6eb
BLAKE2b-256 49fec7efdfd0fe0084d149f7d47d776a6a5642a4cf1c154bfd892888d41db616

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp37-cp37m-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp37-cp37m-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 970.3 kB
  • Tags: CPython 3.7m, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp37-cp37m-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f3de07b7f19296a702c8710f44b221aefe6563461e209198862cd1f06401b13d
MD5 81adacf7506ca2101e6f2c84b014e195
BLAKE2b-256 d0ef50b4a6c59a784e47a6be61062d599f2f4a0907b9d261f29cd66b5db69cb4

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: lupa-2.2-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 50b2f0f8bfcacd68c9ae0a2872ff4b90c2df0490f193253c922283a295f23b6a
MD5 7628d0ca6773a72c61947463b91c2971
BLAKE2b-256 6433fc97ea9a2cb699e62b70730a4e6e26a49330151e5a26d9bf373645458734

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-win32.whl.

File metadata

  • Download URL: lupa-2.2-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 911.1 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 617fc3532f224619e15d45adb9c9af8f4690e36cad332d68d49e78463e51d528
MD5 93b5fef813b870a1e89346ad5b4de479
BLAKE2b-256 ce08d35f602f2994cd938b5edf5637fc2deff28d9876eb27a91ca8676c085dcd

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp36-cp36m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 211d3371d9836d87b2097f520492241cd5e06b29ca8777739c4fe30a1df4c76c
MD5 86a28b4fd08bb4a45ea95484052d1bef
BLAKE2b-256 4df559b3b6d6d83b0c605060837fdd186687af099081c2ffd165ba1ca6a509e5

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: lupa-2.2-cp36-cp36m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 da3460b920d4520ae8a3927b92c22402592fe2e31f08492c3c0ba9b8eadee302
MD5 1c6d5851fe5288086fdf4ce941d6630c
BLAKE2b-256 68a4f43db3b52284055ef10526d22fd26868c5661b4cf2575fbec1b3c606dc21

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: lupa-2.2-cp36-cp36m-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp36-cp36m-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 56be246cf7126f980c13b79a03ad43361dee5a65f8be8c4e2feb58a2bdcc5a2a
MD5 b136da9f27c45aee52f37d96bc861c68
BLAKE2b-256 f012cbd93dd37dd0be9acf2667271e5f02f3e4ef7614b4070a2099a3314c6ede

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 92e1c6a1f380bc829618d0e95c15612b6e2604baa8ffd42547451e9d842837ae
MD5 bd8ea5083529e8a714d2688921269a07
BLAKE2b-256 fd31b7ac3f6da95cb11c889f337414ae85b0b8a30ab32ff24e56ce4376b79f48

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8149dcbe9953e8cad991949dec41bf6dbaa8a2d613e4b024f98e510b0aab4fa4
MD5 71d60299e7bdbd369665e535e3a6f2f6
BLAKE2b-256 3de7ebd08f5982ee7b49aaa3580aa2146fd911fa827f5a3aef4ee2f1de22e50f

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lupa-2.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c597ea2dc203767dcb5a853cf885a7238b0639f5b7cb5c6ad5dbe5d2b39e25c6
MD5 887177dca73bdd3666b6d274429f06d9
BLAKE2b-256 fbbf0682ca220027e72ada976e084ae6b834391de723893f16bb7cf902618291

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp36-cp36m-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp36-cp36m-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.6m, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp36-cp36m-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 afe2b90c65f61f7d5ad55cdbfbb89cb50e5ab4d6184ea975befc51ffdc20dc8f
MD5 6e47c3a1539c23a6de26c96ea4c026a7
BLAKE2b-256 13469e1f7d804e5384326e6a57dc96f440e5f9c5f21b525637404e1229a8e6ed

See more details on using hashes here.

File details

Details for the file lupa-2.2-cp27-cp27m-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.2-cp27-cp27m-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 2.7m, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.7.1 requests/2.26.0 setuptools/57.4.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6

File hashes

Hashes for lupa-2.2-cp27-cp27m-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4bb05e3fc8f794b4a1b8a38229c3b4ae47f83cfbe7f6b172032f66d3308a0934
MD5 7b364d7eb5183c5b66fd25c52121f74d
BLAKE2b-256 7d2657185674aab2053637f93604a242887fd311fa3b5b7e9601f593edad917b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page