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 3.8 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: ... 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.6 (2025-10-24)

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

  • Built with Cython 3.1.6.

2.5 (2025-06-15)

  • GH#284: Lua uses dlopen() again, which was lost in Lupa 2.3. Patch by Philipp Krones.

  • The bundled Lua 5.4 was updated to 5.4.8.

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

  • Built with Cython 3.1.2.

2.4 (2025-01-10)

  • The windows wheels now bundle LuaJIT 2.0 and 2.1. (patch by Michal Plichta)

  • Failures in the test suite didn’t set a non-zero process exit value.

2.3 (2025-01-09)

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

  • The bundled Lua 5.4 was updated to 5.4.7.

  • Removed support for Python 2.x.

  • Built with Cython 3.0.11.

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.6.tar.gz (7.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

lupa-2.6-cp314-cp314t-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.14tWindows x86-64

lupa-2.6-cp314-cp314t-win32.whl (1.6 MB view details)

Uploaded CPython 3.14tWindows x86

lupa-2.6-cp314-cp314t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

lupa-2.6-cp314-cp314t-musllinux_1_2_i686.whl (1.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ i686

lupa-2.6-cp314-cp314t-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

lupa-2.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

lupa-2.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

lupa-2.6-cp314-cp314t-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl (1.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.12+ i686manylinux: glibc 2.28+ i686

lupa-2.6-cp314-cp314t-macosx_11_0_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ x86-64

lupa-2.6-cp314-cp314t-macosx_11_0_universal2.whl (2.0 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ universal2 (ARM64, x86-64)

lupa-2.6-cp314-cp314t-macosx_11_0_arm64.whl (999.3 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

lupa-2.6-cp314-cp314-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.14Windows x86-64

lupa-2.6-cp314-cp314-win32.whl (1.5 MB view details)

Uploaded CPython 3.14Windows x86

lupa-2.6-cp314-cp314-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

lupa-2.6-cp314-cp314-musllinux_1_2_i686.whl (1.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ i686

lupa-2.6-cp314-cp314-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

lupa-2.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

lupa-2.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

lupa-2.6-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl (1.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.12+ i686manylinux: glibc 2.28+ i686

lupa-2.6-cp314-cp314-macosx_11_0_x86_64.whl (982.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

lupa-2.6-cp314-cp314-macosx_11_0_universal2.whl (1.9 MB view details)

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

lupa-2.6-cp314-cp314-macosx_11_0_arm64.whl (953.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

lupa-2.6-cp313-cp313-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.13Windows x86-64

lupa-2.6-cp313-cp313-win32.whl (1.4 MB view details)

Uploaded CPython 3.13Windows x86

lupa-2.6-cp313-cp313-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

lupa-2.6-cp313-cp313-musllinux_1_2_i686.whl (1.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

lupa-2.6-cp313-cp313-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

lupa-2.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

lupa-2.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

lupa-2.6-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.12+ i686manylinux: glibc 2.28+ i686

lupa-2.6-cp313-cp313-macosx_11_0_x86_64.whl (981.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

lupa-2.6-cp313-cp313-macosx_11_0_universal2.whl (1.9 MB view details)

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

lupa-2.6-cp313-cp313-macosx_11_0_arm64.whl (947.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

lupa-2.6-cp312-cp312-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.12Windows x86-64

lupa-2.6-cp312-cp312-win32.whl (1.4 MB view details)

Uploaded CPython 3.12Windows x86

lupa-2.6-cp312-cp312-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

lupa-2.6-cp312-cp312-musllinux_1_2_i686.whl (1.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

lupa-2.6-cp312-cp312-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

lupa-2.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

lupa-2.6-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.12+ i686manylinux: glibc 2.28+ i686

lupa-2.6-cp312-cp312-macosx_11_0_x86_64.whl (985.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

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

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

lupa-2.6-cp312-cp312-macosx_11_0_arm64.whl (951.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

lupa-2.6-cp311-cp311-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.11Windows x86-64

lupa-2.6-cp311-cp311-win32.whl (1.4 MB view details)

Uploaded CPython 3.11Windows x86

lupa-2.6-cp311-cp311-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

lupa-2.6-cp311-cp311-musllinux_1_2_i686.whl (1.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

lupa-2.6-cp311-cp311-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

lupa-2.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

lupa-2.6-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.12+ i686manylinux: glibc 2.28+ i686

lupa-2.6-cp311-cp311-macosx_11_0_x86_64.whl (992.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

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

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

lupa-2.6-cp311-cp311-macosx_11_0_arm64.whl (962.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

lupa-2.6-cp310-cp310-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.10Windows x86-64

lupa-2.6-cp310-cp310-win32.whl (1.4 MB view details)

Uploaded CPython 3.10Windows x86

lupa-2.6-cp310-cp310-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

lupa-2.6-cp310-cp310-musllinux_1_2_i686.whl (1.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

lupa-2.6-cp310-cp310-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

lupa-2.6-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ i686manylinux: glibc 2.28+ i686

lupa-2.6-cp310-cp310-macosx_11_0_x86_64.whl (985.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

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

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

lupa-2.6-cp310-cp310-macosx_11_0_arm64.whl (954.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

lupa-2.6-cp39-cp39-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.9Windows x86-64

lupa-2.6-cp39-cp39-win32.whl (1.4 MB view details)

Uploaded CPython 3.9Windows x86

lupa-2.6-cp39-cp39-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

lupa-2.6-cp39-cp39-musllinux_1_2_i686.whl (1.2 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ i686

lupa-2.6-cp39-cp39-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

lupa-2.6-cp39-cp39-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl (1.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686manylinux: glibc 2.28+ i686

lupa-2.6-cp39-cp39-macosx_11_0_x86_64.whl (987.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ x86-64

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

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

lupa-2.6-cp39-cp39-macosx_11_0_arm64.whl (956.7 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

lupa-2.6-cp38-cp38-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.8Windows x86-64

lupa-2.6-cp38-cp38-win32.whl (1.4 MB view details)

Uploaded CPython 3.8Windows x86

lupa-2.6-cp38-cp38-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

lupa-2.6-cp38-cp38-musllinux_1_2_i686.whl (1.2 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ i686

lupa-2.6-cp38-cp38-musllinux_1_2_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

lupa-2.6-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

lupa-2.6-cp38-cp38-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl (1.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686manylinux: glibc 2.28+ i686

lupa-2.6-cp38-cp38-macosx_11_0_x86_64.whl (993.1 kB view details)

Uploaded CPython 3.8macOS 11.0+ x86-64

lupa-2.6-cp38-cp38-macosx_11_0_arm64.whl (964.6 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: lupa-2.6.tar.gz
  • Upload date:
  • Size: 7.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6.tar.gz
Algorithm Hash digest
SHA256 9a770a6e89576be3447668d7ced312cd6fd41d3c13c2462c9dc2c2ab570e45d9
MD5 9a1a415e5711f5d0f3f6dd95138ba7e1
BLAKE2b-256 b81c191c3e6ec6502e3dbe25a53e27f69a5daeac3e56de1f73c0138224171ead

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 fc1498d1a4fc028bc521c26d0fad4ca00ed63b952e32fb95949bda76a04bad52
MD5 ab6719e9bc30836dee32b00c8547e532
BLAKE2b-256 7d5edb903ce9cf82c48d6b91bf6d63ae4c8d0d17958939a4e04ba6b9f38b8643

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-win32.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.14t, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 1849efeba7a8f6fb8aa2c13790bee988fd242ae404bd459509640eeea3d1e291
MD5 191c2a7f660086b1f04ba6986931621e
BLAKE2b-256 b636a0f007dc58fc1bbf51fb85dcc82fcb1f21b8c4261361de7dab0e3d8521ef

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9abb98d5a8fd27c8285302e82199f0e56e463066f88f619d6594a450bf269d80
MD5 c6f3229cf8f2a8ab160136ef3cfbd4b7
BLAKE2b-256 b4a089e6a024c3b4485b89ef86881c9d55e097e7cb0bdb74efb746f2fa6a9a76

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314t-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.14t, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 224af0532d216e3105f0a127410f12320f7c5f1aa0300bdf9646b8d9afb0048c
MD5 829068d4e6805919c4873a23cedf2131
BLAKE2b-256 c206d88add2b6406ca1bdec99d11a429222837ca6d03bea42ca75afa169a78cb

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1425017264e470c98022bba8cff5bd46d054a827f5df6b80274f9cc71dafd24f
MD5 e65db87c85e234be41d812189ca6014f
BLAKE2b-256 2b2c47bf8b84059876e877a339717ddb595a4a7b0e8740bacae78ba527562e1c

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6aa58454ccc13878cc177c62529a2056be734da16369e451987ff92784994ca7
MD5 f55aded54269fa219e6d8039f5657f16
BLAKE2b-256 a742d8125f8e420714e5b52e9c08d88b5329dfb02dcca731b4f21faaee6cc5b5

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 661d895cd38c87658a34780fac54a690ec036ead743e41b74c3fb81a9e65a6aa
MD5 329ef972a050bf4360b1ccc7f696f856
BLAKE2b-256 1986202ff4429f663013f37d2229f6176ca9f83678a50257d70f61a0a97281bf

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314t-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 0334753be028358922415ca97a64a3048e4ed155413fc4eaf87dd0a7e2752983
MD5 d3e25bb6696527b384a45d3bbccc4117
BLAKE2b-256 516b36bb5a5d0960f2a5c7c700e0819abb76fd9bf9c1d8a66e5106416d6e9b14

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314t-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 cd852a91a4a9d4dcbb9a58100f820a75a425703ec3e3f049055f60b8533b7953
MD5 672fb10f0bd3d80457ca34396a5ed01d
BLAKE2b-256 53a5457ffb4f3f20469956c2d4c4842a7675e884efc895b2f23d126d23e126cc

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-macosx_11_0_universal2.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314t-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.14t, macOS 11.0+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314t-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 589db872a141bfff828340079bbdf3e9a31f2689f4ca0d88f97d9e8c2eae6142
MD5 bc4405ff059e0adfd929b34ffadf3069
BLAKE2b-256 c56d501994291cb640bfa2ccf7f554be4e6914afa21c4026bd01bff9ca8aac57

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314t-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 999.3 kB
  • Tags: CPython 3.14t, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0e21b716408a21ab65723f8841cf7f2f37a844b7a965eeabb785e27fca4099cf
MD5 5de9c758def7cbab5a22c6dbd93a1b1a
BLAKE2b-256 473ca1f23b01c54669465f5f4c4083107d496fbe6fb45998771420e9aadcf145

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b74f944fe46c421e25d0f8692aef1e842192f6f7f68034201382ac440ef9ea67
MD5 c98212730de1ed11be467d99d60da519
BLAKE2b-256 c5dedf71896f25bdc18360fdfa3b802cd7d57d7fede41a0e9724a4625b412c85

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-win32.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 cb34169c6fa3bab3e8ac58ca21b8a7102f6a94b6a5d08d3636312f3f02fafd8f
MD5 a3b2412a1f2fd69c63f68a00d7724ff7
BLAKE2b-256 12f7a6f9ec2806cf2d50826980cdb4b3cffc7691dc6f95e13cc728846d5cb793

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.14, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e4dadf77b9fedc0bfa53417cc28dc2278a26d4cbd95c29f8927ad4d8fe0a7ef9
MD5 3c99e4c8409fcb9de0b1be5bd77e29a1
BLAKE2b-256 84ffe318b628d4643c278c96ab3ddea07fc36b075a57383c837f5b11e537ba9d

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.14, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 f3154e68972befe0f81564e37d8142b5d5d79931a18309226a04ec92487d4ea3
MD5 227555c938add088c917519908fb2aea
BLAKE2b-256 b6dc9692fbcf3c924d9c4ece2d8d2f724451ac2e09af0bd2a782db1cef34e799

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 daebb3a6b58095c917e76ba727ab37b27477fb926957c825205fbda431552134
MD5 3646e06a639a16beae45225ffb151353
BLAKE2b-256 e610824173d10f38b51fc77785228f01411b6ca28826ce27404c7c912e0e442c

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e8faddd9d198688c8884091173a088a8e920ecc96cda2ffed576a23574c4b3f6
MD5 1466a06035335379ce421f6b62fce081
BLAKE2b-256 23c6a04e9cef7c052717fcb28fb63b3824802488f688391895b618e39be0f684

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 96594eca3c87dd07938009e95e591e43d554c1dbd0385be03c100367141db5a8
MD5 06466362c83a3e687a2b72e2d4abe108
BLAKE2b-256 9e9c59e6cffa0d672d662ae17bd7ac8ecd2c89c9449dee499e3eb13ca9cd10d9

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 052ee82cac5206a02df77119c325339acbc09f5ce66967f66a2e12a0f3211cad
MD5 99eb9ee2d6d74be22495c0f3a660b8cf
BLAKE2b-256 41f7f39e0f1c055c3b887d86b404aaf0ca197b5edfd235a8b81b45b25bac7fc3

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 982.3 kB
  • Tags: CPython 3.14, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 458bd7e9ff3c150b245b0fcfbb9bd2593d1152ea7f0a7b91c1d185846da033fe
MD5 5075d60e42e208dab20f4d4d12c062c8
BLAKE2b-256 a398f9ff60db84a75ba8725506bbf448fb085bc77868a021998ed2a66d920568

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-macosx_11_0_universal2.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.14, macOS 11.0+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 a37e01f2128f8c36106726cb9d360bac087d58c54b4522b033cc5691c584db18
MD5 996be21583dcc453cc7256c255879be2
BLAKE2b-256 104127bbe81953fb2f9ecfced5d9c99f85b37964cfaf6aa8453bb11283983721

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lupa-2.6-cp314-cp314-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 953.8 kB
  • Tags: CPython 3.14, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dcb6d0a3264873e1653bc188499f48c1fb4b41a779e315eba45256cfe7bc33c1
MD5 e333a078a0659183856cdf8afc070b35
BLAKE2b-256 669dd9427394e54d22a35d1139ef12e845fd700d4872a67a34db32516170b746

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: lupa-2.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b1335a5835b0a25ebdbc75cf0bda195e54d133e4d994877ef025e218c2e59db9
MD5 db118b8431a472502e80307fdd4964a9
BLAKE2b-256 f9b455e885834c847ea610e111d87b9ed4768f0afdaeebc00cd46810f25029f6

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-win32.whl.

File metadata

  • Download URL: lupa-2.6-cp313-cp313-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 ee9523941ae0a87b5b703417720c5d78f72d2f5bc23883a2ea80a949a3ed9e75
MD5 e1c4317e4c03bf06b08cb13d2b625af3
BLAKE2b-256 592f33ecb5bedf4f3bc297ceacb7f016ff951331d352f58e7e791589609ea306

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp313-cp313-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.13, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 de7c0f157a9064a400d828789191a96da7f4ce889969a588b87ec80de9b14772
MD5 4d62ab1ee9c59e16332bf814b99ce7f5
BLAKE2b-256 10e5b216c054cf86576c0191bf9a9f05de6f7e8e07164897d95eea0078dca9b2

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lupa-2.6-cp313-cp313-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.13, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 0c53ee9f22a8a17e7d4266ad48e86f43771951797042dd51d1494aaa4f5f3f0a
MD5 f4f7df98e26338fae6ae3de07e008e38
BLAKE2b-256 31142086c1425c985acfb30997a67e90c39457122df41324d3c179d6ee2292c6

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b0edd5073a4ee74ab36f74fe61450148e6044f3952b8d21248581f3c5d1a58be
MD5 90ad3b40565b720ab715ccb0d454373a
BLAKE2b-256 53dc15b80c226a5225815a890ee1c11f07968e0aba7a852df41e8ae6fe285063

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6eae1ee16b886b8914ff292dbefbf2f48abfbdee94b33a88d1d5475e02423203
MD5 bb9b2555cf5aef45dfd0078f157fc1d6
BLAKE2b-256 ddeff8c32e454ef9f3fe909f6c7d57a39f950996c37a3deb7b391fec7903dab7

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a02d25dee3a3250967c36590128d9220ae02f2eda166a24279da0b481519cbff
MD5 28462a8be39165d2198c10b4f4a0c3f6
BLAKE2b-256 096c0e9ded061916877253c2266074060eb71ed99fb21d73c8c114a76725bce2

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 60d2f902c7b96fb8ab98493dcff315e7bb4d0b44dc9dd76eb37de575025d5685
MD5 ef0cc9968bc3d50e0900788b27208b86
BLAKE2b-256 5c4874859073ab276bd0566c719f9ca0108b0cfc1956ca0d68678d117d47d155

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp313-cp313-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 981.1 kB
  • Tags: CPython 3.13, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 26f2b3c085fe76e9119e48c1013c1cccdc1f51585d456858290475aa38e7089e
MD5 7f3834099c115611dafba5bff8eab10e
BLAKE2b-256 668ead22b0a19454dfd08662237a84c792d6d420d36b061f239e084f29d1a4f3

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

  • Download URL: lupa-2.6-cp313-cp313-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.13, macOS 11.0+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 d1f5afda5c20b1f3217a80e9bc1b77037f8a6eb11612fd3ada19065303c8f380
MD5 b5b90543e6075e7ac6878982cfff3041
BLAKE2b-256 ce4cd327befb684660ca13cf79cd1f1d604331808f9f1b6fb6bf57832f8edf80

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lupa-2.6-cp313-cp313-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 947.2 kB
  • Tags: CPython 3.13, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 663a6e58a0f60e7d212017d6678639ac8df0119bc13c2145029dcba084391310
MD5 7119721c33f9ef96e1b066984730c8fb
BLAKE2b-256 281d21176b682ca5469001199d8b95fa1737e29957a3d185186e7a8b55345f2e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c735a1ce8ee60edb0fe71d665f1e6b7c55c6021f1d340eb8c865952c602cd36f
MD5 e9137335a75f17286729055371af77c7
BLAKE2b-256 b8155121e68aad3584e26e1425a5c9a79cd898f8a152292059e128c206ee817c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp312-cp312-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 325894e1099499e7a6f9c351147661a2011887603c71086d36fe0f964d52d1ce
MD5 000065b4532b015646e0ca56a8c0f280
BLAKE2b-256 f31b79c17b23c921f81468a111cad843b076a17ef4b684c4a8dff32a7969c3f0

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp312-cp312-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 239e63948b0b23023f81d9a19a395e768ed3da6a299f84e7963b8f813f6e3f9c
MD5 dbfb44695ce57477187e7fa209c7286c
BLAKE2b-256 e429089b4d2f8e34417349af3904bb40bec40b65c8731f45e3fd8d497ca573e5

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lupa-2.6-cp312-cp312-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.12, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 8dd0861741caa20886ddbda0a121d8e52fb9b5bb153d82fa9bba796962bf30e8
MD5 385701a8b1b8c567005fc22de1bb9f78
BLAKE2b-256 352a5f7d2eebec6993b0dcd428e0184ad71afb06a45ba13e717f6501bfed1da3

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5a76ead245da54801a81053794aa3975f213221f6542d14ec4b859ee2e7e0323
MD5 2337dc6f7b765aaff7ee851ed6b9e379
BLAKE2b-256 92342f4f13ca65d01169b1720176aedc4af17bc19ee834598c7292db232cb6dc

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cf3bda96d3fc41237e964a69c23647d50d4e28421111360274d4799832c560e9
MD5 4ec7c1d53e905a67ff4de53da769a898
BLAKE2b-256 1c9f5a4f7d959d4feba5e203ff0c31889e74d1ca3153122be4a46dca7d92bf7c

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 21de9f38bd475303e34a042b7081aabdf50bd9bafd36ce4faea2f90fd9f15c31
MD5 a932db2ce9a0b4223036fa9bdb4cd68b
BLAKE2b-256 404ee7c0583083db9d7f1fd023800a9767d8e4391e8330d56c2373d890ac971b

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 00a934c23331f94cb51760097ebfab14b005d55a6b30a2b480e3c53dd2fa290d
MD5 4d3c1e19256221be7473191b8f25c581
BLAKE2b-256 eb239f9a05beee5d5dce9deca4cb07c91c40a90541fc0a8e09db4ee670da550f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp312-cp312-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 985.2 kB
  • Tags: CPython 3.12, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b766f62f95b2739f2248977d29b0722e589dcf4f0ccfa827ccbd29f0148bd2e5
MD5 a8ee8ccb03b887f62fb2a3a411931832
BLAKE2b-256 24be3d6b5f9a8588c01a4d88129284c726017b2089f3a3fd3ba8bd977292fea0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-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/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 7aba985b15b101495aa4b07112cdc08baa0c545390d560ad5cfde2e9e34f4d58
MD5 ce5b84ccdd3d2fd1e7ba650aff5d7490
BLAKE2b-256 8685cedea5e6cbeb54396fdcc55f6b741696f3f036d23cfaf986d50d680446da

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 951.7 kB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 47ce718817ef1cc0c40d87c3d5ae56a800d61af00fbc0fad1ca9be12df2f3b56
MD5 fcecc14a29dfcc182e7b76db3a45a8b9
BLAKE2b-256 9486ce243390535c39d53ea17ccf0240815e6e457e413e40428a658ea4ee4b8d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9505ae600b5c14f3e17e70f87f88d333717f60411faca1ddc6f3e61dce85fa9e
MD5 73870eb38b7cf302a138b63fc01361b0
BLAKE2b-256 6f9a6f2af98aa5d771cea661f66c8eb8f53772ec1ab1dfbce24126cfcd189436

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp311-cp311-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 defaf188fde8f7a1e5ce3a5e6d945e533b8b8d547c11e43b96c9b7fe527f56dc
MD5 85dbed164f601509d02348778a971a42
BLAKE2b-256 947c050e02f80c7131b63db1474bff511e63c545b5a8636a24cbef3fc4da20b6

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp311-cp311-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8dbdcbe818c02a2f56f5ab5ce2de374dab03e84b25266cfbaef237829bc09b3f
MD5 b71f101959d3e776e7b76c032ef3050d
BLAKE2b-256 e4f2cf29b20dbb4927b6a3d27c339ac5d73e74306ecc28c8e2c900b2794142ba

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lupa-2.6-cp311-cp311-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.11, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 3fa8777e16f3ded50b72967dc17e23f5a08e4f1e2c9456aff2ebdb57f5b2869f
MD5 e495b5a4150d82b7e27f5a249c51c7c1
BLAKE2b-256 2e6037533a8d85bf004697449acb97ecdacea851acad28f2ad3803662487dd2a

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 153d2cc6b643f7efb9cfc0c6bb55ec784d5bac1a3660cfc5b958a7b8f38f4a75
MD5 8f1a72ba90cdb579bd29b4fcf124cc53
BLAKE2b-256 2edcf843f09bbf325f6e5ee61730cf6c3409fc78c010d968c7c78acba3019ca7

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 80b22923aa4023c86c0097b235615f89d469a0c4eee0489699c494d3367c4c85
MD5 ffe41ba170b09d514f3936a6f6c999c7
BLAKE2b-256 68672cc52ab73d6af81612b2ea24c870d3fa398443af8e2875e5befe142398b1

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 af880a62d47991cae78b8e9905c008cbfdc4a3a9723a66310c2634fc7644578c
MD5 a92260979ea50bab29217be8852c5440
BLAKE2b-256 1c269f1154c6c95f175ccbf96aa96c8f569c87f64f463b32473e839137601a8b

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 561a8e3be800827884e767a694727ed8482d066e0d6edfcbf423b05e63b05535
MD5 d18c50e4fa99b6e7c7376a7cf9c819df
BLAKE2b-256 6546e6c7facebdb438db8a65ed247e56908818389c1a5abbf6a36aab14f1057d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp311-cp311-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 992.2 kB
  • Tags: CPython 3.11, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 a8fcee258487cf77cdd41560046843bb38c2e18989cd19671dd1e2596f798306
MD5 fffa1899720c5510f3e751bedee2574f
BLAKE2b-256 ac0c8ef9ee933a350428b7bdb8335a37ef170ab0bb008bbf9ca8f4f4310116b6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-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/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 ebe1bbf48259382c72a6fe363dea61a0fd6fe19eab95e2ae881e20f3654587bf
MD5 4b59e6d8ab3f29557373f2fbb3a1e686
BLAKE2b-256 e6674a748604be360eb9c1c215f6a0da921cd1a2b44b2c5951aae6fb83019d3a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 962.9 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d988c0f9331b9f2a5a55186701a25444ab10a1432a1021ee58011499ecbbdd5
MD5 24d05187cb60f663019303c666520c64
BLAKE2b-256 ca291f66907c1ebf1881735afa695e646762c674f00738ebf66d795d59fc0665

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e4656a39d93dfa947cf3db56dc16c7916cb0cc8024acd3a952071263f675df64
MD5 0643e182e541b6acff6bfa028e4629ae
BLAKE2b-256 352a1708911271dd49ad87b4b373b5a4b0e0a0516d3d2af7b76355946c7ee171

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp310-cp310-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 60a403de8cab262a4fe813085dd77010effa6e2eb1886db2181df803140533b1
MD5 86919f46b71211dd58d11d49515c3d43
BLAKE2b-256 2e8f2272d429a7fa9dc8dbd6e9c5c9073a03af6007eb22a4c78829fec6a34b80

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp310-cp310-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 66eea57630eab5e6f49fdc5d7811c0a2a41f2011be4ea56a087ea76112011eb7
MD5 9245a644c18d44af3cf47eae444abafb
BLAKE2b-256 4f43e1b297225c827f55752e46fdbfb021c8982081b0f24490e42776ea69ae3b

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lupa-2.6-cp310-cp310-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.10, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 21f2b5549681c2a13b1170a26159d30875d367d28f0247b81ca347222c755038
MD5 02141225af541f96c1d427023d9e9535
BLAKE2b-256 a2c2a19dd80d6dc98b39bbf8135b8198e38aa7ca3360b720eac68d1d7e9286b5

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6deef8f851d6afb965c84849aa5b8c38856942df54597a811ce0369ced678610
MD5 0c508194e198537eba40cce5e527fffe
BLAKE2b-256 3f6c1a05bb873e30830f8574e10cd0b4cdbc72e9dbad2a09e25810b5e3b1f75d

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 86f04901f920bbf7c0cac56807dc9597e42347123e6f1f3ca920f15f54188ce5
MD5 d68c64894eee5b933e34334ed85bb70c
BLAKE2b-256 45ac01be1fed778fb0c8f46ee8cbe344e4d782f6806fac12717f08af87aa4355

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5deede7c5b36ab64f869dae4831720428b67955b0bb186c8349cf6ea121c852b
MD5 24e309917f7b8f570f637234e864c88a
BLAKE2b-256 2a5c3a3f23fd6a91b0986eea1ceaf82ad3f9b958fe3515a9981fb9c4eb046c8b

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 202160e80dbfddfb79316692a563d843b767e0f6787bbd1c455f9d54052efa6c
MD5 0eb0b44a2ffd498eebc3ae721ce918fe
BLAKE2b-256 441e8a4bd471e018aad76bcb9455d298c2c96d82eced20f2ae8fcec8cd800948

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp310-cp310-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 985.0 kB
  • Tags: CPython 3.10, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f4e159e7d814171199b246f9235ca8961f6461ea8c1165ab428afa13c9289a94
MD5 a9eb3ebd62a3a13377b82b0b2c7fc4f5
BLAKE2b-256 eb18f248341c423c5d48837e35584c6c3eb4acab7e722b6057d7b3e28e42dae8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-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/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 8726d1c123bbe9fbb974ce29825e94121824e66003038ff4532c14cc2ed0c51c
MD5 edc46dc5ccc61d97f3e59ce29dfc8f5d
BLAKE2b-256 2e71704740cbc6e587dd6cc8dabf2f04820ac6a671784e57cc3c29db795476db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 954.8 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6b3dabda836317e63c5ad052826e156610f356a04b3003dfa0dbe66b5d54d671
MD5 cab79b65d09b144e71ac698e32af772b
BLAKE2b-256 a115713cab5d0dfa4858f83b99b3e0329072df33dc14fc3ebbaa017e0f9755c4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b4b2e9b3795a9897cf6cfcc58d08210fdc0d13ab47c9a0e13858c68932d8353c
MD5 b270634d4222e6392ae51318507155ce
BLAKE2b-256 08e03fd9617814663129fa4a9b33a980c3fe344297337cb550c738f87f730f6b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp39-cp39-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 bf28f68ae231b72008523ab5ac23835ba0f76e0e99ec38b59766080a84eb596a
MD5 6d937df2f4eabfb62d5caf5c7fc3f915
BLAKE2b-256 9edf3f7631eea3478ac3868cbcb2763c1a4e2f7b875fcb2683f956bf7aabf65f

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp39-cp39-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d2f656903a2ed2e074bf2b7d300968028dfa327a45b055be8e3b51ef0b82f9bf
MD5 563628c7713e27ad9ffa88ca3325b1b7
BLAKE2b-256 071bc7fe79bcda6d489306bb7c1a9b4d545b7f0930b9ce80080643fc39b3fdc9

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp39-cp39-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lupa-2.6-cp39-cp39-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.9, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 b683fbd867c2e54c44a686361b75eee7e7a790da55afdbe89f1f23b106de0274
MD5 ce4a06eaa182fa244a2f0a697822fa86
BLAKE2b-256 e6018ca3a56a4e127784a15f0c7ec1f67e9894c2e9d4bf402389ddda4ea8081b

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: lupa-2.6-cp39-cp39-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.9, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 57ac88a00ce59bd9d4ddcd4fca8e02564765725f5068786b011c9d1be3de20c5
MD5 c03b9c8a1cf7de1c68ec21eb68580c1a
BLAKE2b-256 ab17058cc212c22d6a25990226afd02c741b2813b5f325396a9180b4accb70ac

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 559714053018d9885cc8c36a33c5b7eb9aad30fb6357719cac3ce4dc6b39157e
MD5 9a092911dae4709e8c55a040bb77c3b7
BLAKE2b-256 a412d55d45a8c253e7981f59ae920bac49dbd49888954b25fd1eb3a7be1321db

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 43eb6e43ea8512d0d65b995d36dd9d77aa02598035e25b84c23a1b58700c9fb2
MD5 4c3789eb5fead347e5ea8598492e51e0
BLAKE2b-256 24b327a0ec4c73011e86f9bd2eada010062308a4ed32921898d066ae54e064e1

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp39-cp39-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp39-cp39-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 5871935cb36d1d22f9c04ac0db75c06751bd95edcfa0d9309f732de908e297a9
MD5 dab08301e15c392c9193626f641ede53
BLAKE2b-256 5f50edad7c180ab28aa543e6c3895e56a2c7a6ff92140a283316e6086f118552

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp39-cp39-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 987.3 kB
  • Tags: CPython 3.9, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 5826e687c89995a6eaafeae242071ba16448eec1a9ee8e17ed48551b5d1e21c2
MD5 d6bc2345f01b3a3dc1ece6e2e7389471
BLAKE2b-256 f57f98a6a2535285d43457eb665822ab08447e2196b614db3152772d457ca426

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-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/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp39-cp39-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 4446396ca3830be0c106c70db4b4f622c37b2d447874c07952cafb9c57949a4a
MD5 9c08ff1f1e95160f1b5c8efd8f1dd687
BLAKE2b-256 da910ca797da854478225c0f6a8fc3c500a2f5c11826d732735beb5dffff9e85

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 956.7 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8897dc6c3249786b2cdf2f83324febb436193d4581b6a71dea49f77bf8b19bb0
MD5 8186f2a0c0d759a7760f48969a7c89f5
BLAKE2b-256 fbc5918ed6c3af793764bae155d68df47bab2635ab7c94dee3dbb5d9c6d5ba38

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 05681f8ffb41f0c7fbb9ca859cc3a7e4006e9c6350d25358b535c5295c6a9928
MD5 c2b6cc14d23db467f09bf14854199eff
BLAKE2b-256 f6cb9d04bb5b2446e7677f5be3049816a8086b90e671fe2c272bb495b9e82def

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp38-cp38-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 10c191bc1d5565e4360d884bea58320975ddb33270cdf9a9f55d1a1efe79aa03
MD5 94cceea884a0703e1b42f8796166946f
BLAKE2b-256 95cd101f2a3bb2f1d77ed900f68a332fd74ef7a1c766fe2b72a6959e02d0c331

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: lupa-2.6-cp38-cp38-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 aef1a8bc10c50695e1a33a07dbef803b93eb97fc150fdb19858d704a603a67dd
MD5 84c3722380ef971051a1f29e0b139b19
BLAKE2b-256 32c947c36ea5de327c2bb8fc14253675da7a193eec3ae2c844fe1b8682e26332

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp38-cp38-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lupa-2.6-cp38-cp38-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 fa6c1379e83d4104065c151736250a09f3a99e368423c7a20f9c59b15945e9fc
MD5 595e67de1ef79c711130ac14d5371cc0
BLAKE2b-256 7268b7caa580a8d72809ea7dd447bf86f309d41065a1d8a24bc0a6091a942bb3

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp38-cp38-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: lupa-2.6-cp38-cp38-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.8, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c17f6b6193ced33cc7ca0b2b08b319a1b3501b014a3a3f9999c01cafc04c40f5
MD5 5eb8de5d588268a6e6e9fd6b4daeb761
BLAKE2b-256 c1b7aa8cef138d14d2f3bba9f10d0907c0f60dd1c1266433bf89effa742561d0

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 241f4ddab33b9a686fc76667241bebc39a06b74ec40d79ec222f5add9000fe57
MD5 0a1c3f07fab9de9f8f38b15a416e8298
BLAKE2b-256 803e3dfe316dc0e5bfd1eaa21698fb725cc504cf22fb15d5a754f7bedf97a8ae

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c781170bc7134704ae317a66204d30688b41d3e471e17e659987ea4947e11f20
MD5 bf940a33f04303560704f83bacdb2878
BLAKE2b-256 6db10ea0b81377907de8d425c10555325e17ac4e610de2402b44c37f50f2ba85

See more details on using hashes here.

File details

Details for the file lupa-2.6-cp38-cp38-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for lupa-2.6-cp38-cp38-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 728c466e91174dad238f8a9c1cbdb8e69ffe559df85f87ee76edac3395300949
MD5 192f68b0b98e749c9392f48f961c34db
BLAKE2b-256 9389ab15dc1a1093133390e96589c5c357d1d62bb6c73067f3f08d4fa6ea9708

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp38-cp38-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 993.1 kB
  • Tags: CPython 3.8, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 ef8dfa7fe08bc3f4591411b8945bbeb15af8512c3e7ad5e9b1e3a9036cdbbce7
MD5 d3d05463e693321035e0a6f99d8e25dd
BLAKE2b-256 7605cc6136a638188bc2051a8b2393daba8af55eabfe44c3f17ac71e6c9493b8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lupa-2.6-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 964.6 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lupa-2.6-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9591700991e333b70dd92b48f152eb4731b8b24af671a9f6f721b74d68ed4499
MD5 84a024fdc7991f8234e5c8e990d0432c
BLAKE2b-256 2819967d71809b7f77b7888cdf8646201348d7e7ea542c80f42ec4c34ea17a49

See more details on using hashes here.

Supported by

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