On 10/08/2018 12:29 AM, Terry Reedy wrote:
On 10/3/2018 4:29 PM, Marcus Harnisch wrote:
When trying to import lzma on one of my machines, I was suprised to get a normal import error like for any other module.
What was the traceback and message? Did you get an import error for one of the three imports in lzma.py. I don't know why you would expect anything else. Any import in any stdlib module can potential fail if the file is buggy, corrupted, or missing.
$ /usr/bin/python3 Python 3.7.0 (default, Oct 4 2018, 03:21:59) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.7/lzma.py", line 27, in <module> ModuleNotFoundError: No module named '_lzma'
According to the docs lzma has been part of stdlib since 3.3. Further digging revealed that the error is due to the fact that xz wasn't compiled in when building Python.
Perhaps this is a buggy build.
This, I reckon, depends on the perspective and the definition of “buggy”. If the build process finishes without error, can we assume that the build is not buggy? If we make claims along the lines of “nobody in their right mind would build Python without lzma” it would only be fair to break the build if liblzma can't be detected. Unless I missed anything it doesn't happen until after the build has finished successfully, that a message is printed which lists the modules which couldn't be detected by setup.py. Here is a list of modules, which I believe are affected:
$ grep -F missing.append setup.py missing.append('spwd') missing.append('readline') missing.append('_ssl') missing.append('_hashlib') missing.append('_sqlite3') missing.append('_dbm') missing.append('_gdbm') missing.append('nis') missing.append('_curses') missing.append('_curses_panel') missing.append('zlib') missing.append('zlib') missing.append('zlib') missing.append('_bz2') missing.append('_lzma') missing.append('_elementtree') missing.append('ossaudiodev') missing.append('_tkinter') missing.append('_uuid')
Have you complained to the distributor?
After finding the root cause of the missing import I did file a request for including lzma in future releases of the distribution.
All I am asking is that unsuspecting users not be left in the dark when it comes to debugging unexpected import errors. I believe a missing stdlib module qualifies for “unexpected”. This could happen in form of documentation or by means of an import error handler that prints some helpful message in case that a stdlib module couldn't be found.