omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular
    1. Home
    2. avonlady

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 3
    • Best 0
    • Controversial 0
    • Groups 0

    avonlady

    @avonlady

    0
    Reputation
    249
    Profile views
    3
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    avonlady Unfollow Follow

    Latest posts made by avonlady

    • Using C modules in Pythonista

      Hi,

      I saw somewhat similar discussion here, but not exactly the same.

      On my jailbroken iPhone, I had setup a complete build environment incl. clang, iOS SDK, Python Dev files, etc. One of the nice things this allows me to do is to compile Python modules that rely on C code. As an example I chose greenlet, which was listed as one of the blacklisted modules in StaSH, exactly because of the C dependency.

      When I run it in a Python installation outside of Pythonista, all works well:

      iPhone-5s:/private/var/mobile/Containers/Shared/AppGroup/appid/Pythonista3/Documents root# uname -a
      Darwin iPhone-5s 18.7.0 Darwin Kernel Version 18.7.0: Mon Aug 19 22:24:08 PDT 2019; root:xnu-4903.272.1~1/RELEASE_ARM64_S5L8960X iPhone6,2 arm64 N53AP Darwin
      iPhone-5s:/private/var/mobile/Containers/Shared/AppGroup/appid/Pythonista3/Documents root# file ./site-packages-3/greenlet.so
      ./site-packages-3/greenlet.so: Mach-O 64-bit arm64 bundle, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL>
      iPhone-5s:/private/var/mobile/Containers/Shared/AppGroup/appid/Pythonista3/Documents root# python3
      Python 3.7.3 (default, May  8 2019, 14:19:08) 
      [Clang 10.0.1 (clang-1001.0.46.4)] on darwin
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import greenlet
      >>> dir(greenlet)
      ['GREENLET_USE_CONTEXT_VARS', 'GREENLET_USE_GC', 'GREENLET_USE_TRACING', 'GreenletExit', '_C_API', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', 'error', 'getcurrent', 'gettrace', 'greenlet', 'settrace']
      >>> dir(greenlet.greenlet)
      ['GreenletExit', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_stack_saved', 'dead', 'error', 'getcurrent', 'gettrace', 'gr_frame', 'parent', 'run', 'settrace', 'switch', 'throw']
      

      However, I am not able to call the same module from within Pythonista. I have the greenlet.so file in my site-packages-3 folder, alongside my other non-C modules that work just fine, but when I call import greenlet, all I get is ModuleNotFoundError: No module named 'greenlet' error.

      Since I am doing this experiment on a jailbroken iPhone, I don't think code signing is at fault here, but I even tried signing the .so with my Developer Certificate, which did not help.

      So, my question: Is Pythonista hardcoded to ignore any .so modules and to look for .pyc and .py only? Do you have any other idea I could try to force Pythonista to load an arm64-compiled C module?

      posted in Pythonista
      avonlady
      avonlady