ctypes.util.find_library doesn't work with python 3
See original GitHub issueWe talked about this in chat before, I just wanted to make an actual issue for this: ctypes.util.find_library
doesn’t work when using python3crystax
out of the box, because it seems to try something with a shell that doesn’t work due to a missing binary.
This code makes it work when put before any ctypes.util import (it includes a PySDL2-specific hack without which PySDL2 will fail to load - this one might actually need addressing in the recipe for PySDL2):
def apply_hack():
import ctypes.util
orig_func = ctypes.util.find_library
def android_find_library_hack(*args):
import os
name = args[0]
# Truncate ending for easier comparison:
if name.find(".so.") >= 0:
name = name.partition(".so.")[0]
if name.endswith(".so"):
name = name[:-len(".so")]
if not name.endswith("."):
name += "."
# Helper function to check lib name:
def check_name(lib_name, search_name):
if filename.endswith('.so') and (
filename.startswith("lib" + search_name) or
filename.startswith(search_name)):
return True
if search_name.endswith("-2.0."): # PySDL2 hack
search_name = search_name[:-len("-2.0.")] + "."
return check_name(lib_name, search_name)
return False
# Check the user app lib dir and system dir:
app_root = os.path.normpath(os.path.abspath(os.path.join(
os.path.dirname(__file__), '..', '..', 'lib')))
sys_dir = "/system/lib"
for lib_search in [app_root, sys_dir]:
if not os.path.exists(lib_search):
continue
for filename in os.listdir(lib_search):
if check_name(filename, name):
return os.path.join(lib_search, filename)
return orig_func(*args)
import ctypes.util
ctypes.util.find_library = android_find_library_hack
apply_hack()
I don’t know enough to put this into python-for-android, but maybe someone with the knowledge can put this into the python launch wrapper somehow to make it magically work for everyone? Feel free to take it, consider it CC0/public domain
(it’s vaguely based on python-for-android’s hack for Python 2 anyway)
Issue Analytics
- State:
- Created 5 years ago
- Comments:9 (5 by maintainers)
Top GitHub Comments
Oh it had the ticket number
#1337
😍 hahaI think there wouldn’t be an issue with applying this monkey patch in the start.c, it would be nicer than having to patch python itself.