[Mobile-sig] [Python-Dev] Import Fails in setup.py On Android
Martin Kolman
martin.kolman at gmail.com
Mon Feb 16 23:37:44 CET 2015
Mon, 16 Feb 2015 16:23:37 -0600 Cyd Haselton <chaselton at gmail.com>:
> More information:
> After uncommenting the select module in Setup, running make clean &&
> make && make install, then running python3, then help(), I get the
> following:
>
> bld/python/Python-3.4.2 $ python3
> Python 3.4.2 (default, Feb 16 2015, 12:33:03)
> [GCC 4.9.2] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>> help()
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/usr/python/lib/python3.4/_sitebuiltins.py
> <http://sitebuiltins.py>", line 102, in __call__
> import pydoc
> File "/usr/python/lib/python3.4/pydoc.py <http://pydoc.py>", line 62,
> in <module>
> import platform
> File "/usr/python/lib/python3.4/platform.py <http://platform.py>",
> line 115, in <module>
> import sys, os, re, subprocess
> File "/usr/python/lib/python3.4/subprocess.py <http://subprocess.py>",
> line 352, in <module>
> import time
> ImportError: dlopen failed: cannot locate symbol
> "PyUnicode_DecodeLocale" referenced by "time.cpython-34m.so
> <http://time.cpython-34m.so>"...
>
> The symbol is in libpython.3.4m.so <http://libpython.3.4m.so>.1...and
> UND in time.cpython-34m.so <http://time.cpython-34m.so>. For some
> reason time isn't finding the symbol in the shared library.
Android does not support versioning in SONAMES[0][1][2] - maybe that's
what is causing these issues ?
[0] https://code.google.com/p/android/issues/detail?id=55868
[1] https://groups.google.com/d/msg/android-ndk/_UhNpRJlA1k/hbryqzEgN94J
[3] https://github.com/MysticTreeGames/Boost-for-Android/issues/44
>
> I've tried copying the library to the folder where the time module
> resides, and to a few other locations, with the same results. Any
> ideas on what I should do next?
>
> Cyd
>
> On February 15, 2015 5:28:45 PM CST, Cyd Haselton
> <chaselton at gmail.com> wrote:
>
> After banging my head against libfakechroot for days I've finally
> managed to fix it to work on Android.
>
> Moving back to Python...I ran make clean && make && make install.
> I run the installed python3 binary, run help() and get the
> following error:
>
> ype "help", "copyright", "credits" or "license" for more information.
> >>> help()
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/usr/python/lib/python3.4/_sitebuiltins.py
> <http://sitebuiltins.py>", line 102, in __call__
> import pydoc
> File "/usr/python/lib/python3.4/pydoc.py <http://pydoc.py>", line
> 62, in <module>
> import platform
> File "/usr/python/lib/python3.4/platform.py <http://platform.py>",
> line 115, in <module>
> import sys, os, re, subprocess
> File "/usr/python/lib/python3.4/subprocess.py
> <http://subprocess.py>", line 406, in <module>
> import select
> ImportError: No module named 'select'
>
>
> I then attempt to import select, then ctypes, and get the
> following errors:
> >>> import select
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> ImportError: No module named 'select'
> >>> import ctypes
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/usr/python/lib/python3.4/ctypes/__init__.py", line 22, in
> <module>
> from struct import calcsize as _calcsize
> File "/usr/python/lib/python3.4/struct.py <http://struct.py>",
> line 13, in <module>
> from _struct import *
> ImportError: dlopen failed: cannot locate symbol "PyLong_AsSize_t"
> referenced by "_struct.cpython-34m.so
> <http://struct.cpython-34m.so>"...
> >>> import _struct
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> ImportError: dlopen failed: cannot locate symbol "PyLong_AsSize_t"
> referenced by "_struct.cpython-34m.so
> <http://struct.cpython-34m.so>"...
> >>>
>
> Googling the ImportError turns up six results...none of them
> related to a missing PyLong_AsSize_t symbol.
>
> Has anyone seen this error before?
>
> Thanks in advance. Headed back to look at the _struct code.
>
> Cyd
>
> On February 8, 2015 6:46:02 PM CST, Cyd Haselton
> <chaselton at gmail.com> wrote:
>
> Quick Update:
>
> I've managed to re-compile a libfakechroot that (I believe) eliminates
> the 'undefined reference to dlopen()' issues; problems importing
> extensions during the build process now display meaningful errors
> instead of crashing the entire thing.
>
> Some imports failed because of missing symbols (i.e. _crypt, which
> makes sense because I don't have -lcrypt on device) and some failed
> because of linking issues (i.e _ctypes). The majority failed to
> import due to an undeclared variable insetup.py <http://setup.py>...which was quickly
> fixed.
>
> Once the most recent build attempt is done, I'll post relevant stack
> traces and errors, if any.
>
> Cyd
>
> On Sat, Feb 7, 2015 at 5:36 AM, Cyd Haselton <chaselton at gmail.com> wrote:
>
> Hello Russ, Thanks for the update. I'm building Python
> 3.4.2 from sources, (using a GCC that I originally ported,
> then upgraded on device) on an Android device in an
> environment that simulates a Linux filesystem using
> fakechroot (Terminal Emulator and KBOX); Python is not
> currently installed in this environment. I've built other
> utilities in this environment successfully; the key is
> making sure that anything that requires dlopen() is built
> with shared libraries and is linked with -lc -ldl, as
> Android's dlopen() is not in its libc but in -ldl. The
> shared part is due to a limitation of the libfakechroot
> that the KBOX environment uses; anything calling dlopen()
> without the necessary links will cause fakechroot to
> terminate the process and throw an undefined symbol error
> For the Python build I've specified -lc -ldl in the
> appropriate environmental variables, in Modules/Setup and
> in setup.py <http://setup.py>. The initial python binary
> is built, but it fails (with the undefined ref to
> dlopen()) when importing the extension modules it has has
> built. I have run nm on those modules and...even though
> -lc -ldl is on the extension build command line...the
> dlopen() symbol is not there. Sorry for the long
> explanation. Let me know if there's info I've left out. On
> February 6, 2015 8:10:16 PM CST, Russell Keith-Magee
> <russell at keith-magee.com> wrote:
>
> Hi Cyd, This list is as good a place as any for what
> you're describing. However, it's a little difficult to
> provide advice without stack traces and details of how
> you've built your Python build to start with. For
> example, are you cross compiling? If so, the problem
> you've described could be caused by referencing the
> wrong Python instance when running setup.py
> <http://setup.py>. Yours, Russ Magee %-) On Fri, Feb
> 6, 2015 at 3:46 AM, Cyd Haselton <chaselton at gmail.com>
> wrote:
>
> Also, if I've got the wrong list, please let me
> know. Links to the correct list/lists are
> optional; I just want to know if this is the right
> place to get help so that I can keep searching if
> it isn't. On Thu, Feb 5, 2015 at 5:40 AM, Cyd
> Haselton <chaselton at gmail.com> wrote:
>
> Since i'm working on an Android tablet, I am
> forwarding the original message I sent to
> python-dev instead of re-typing the entire
> thing. To summarize: I'm building in a
> fakechroot environment on Android that
> supports dynamic calls to libc only. Something
> in the importlib._bootstrap process is not
> linking to...or has not been linked to...the
> necessary libraries (I've checked the
> module...it is being linked to -lc -ldl) but I
> can't figure out what...as there's not a lot
> in the python docs on it. I'm currently
> reading through the importlib docs but any
> help would be greatly appreciated.
> ------------------------------------------------------------------------
> From: Eric Snow <ericsnowcurrently at gmail.com>
> Sent: February 3, 2015 12:10:54 AM CST To: Cyd
> Haselton <chaselton at gmail.com> Cc: Python-Dev
> <python-dev at python.org> Subject: Re:
> [Python-Dev] Import Fails in setup.py
> <http://setup.py> On Android On Mon, Feb 2,
> 2015 at 12:36 PM, Cyd Haselton
> <chaselton at gmail.com> wrote:
>
> After fixing a segfault issue (many thanks
> Ryan) I'm back to the same issue I was
> having with Python 2.7.8; the newly built
> python throws an undefined reference to
> dlopen when running setup.py
> <http://setup.py>...specifically when
> importing just-built extensions I've
> managed to narrow the problem down to the
> following line:
> importlib._bootstrap._SpecMethods(spec).load()
>
>
> That call is where modules are created (and
> executed) via the loader designated for the
> module by the import machinery. So a problem
> here may simply reflect a problem with the
> loader. Which module is being imported when
> you run into trouble? Is it a C-extension
> module? Also keep in mind that basically
> everything in importlib._bootstrap is frozen
> into your Python binary when you build Python
> (or should be). So if you are seeing any
> errors related to something missing or broken
> in importlib._bootstrap, it could be related
> to the build step where importlib gets frozen.
> Either way, more info (e.g. a traceback) would
> be great if you need more help. -eric -- Sent
> from my Android device with K-9 Mail. Please
> excuse my brevity.
>
> ------------------------------------------------------------------------
> Mobile-sig mailing list Mobile-sig at python.org
> https://mail.python.org/mailman/listinfo/mobile-sig
>
> -- Sent from my Android device with K-9 Mail. Please
> excuse my brevity.
>
>
>
> --
> Sent from my Android device with K-9 Mail. Please excuse my brevity.
>
>
> _______________________________________________
> Mobile-sig mailing list
> Mobile-sig at python.org
> https://mail.python.org/mailman/listinfo/mobile-sig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/mobile-sig/attachments/20150216/c77b23a5/attachment-0001.html>
More information about the Mobile-sig
mailing list