Simple import in python 3 errors with complaint about bytes

Mike Boyle moboyle79 at
Tue Oct 21 02:20:54 CEST 2014

Ah, yes.  Thanks to that clever import debug hack, and the suggestion that it would actually be an import within the module causing the trouble, I managed to track it down.  I had tried copying some py3k changes from the "rational" module in numpy/numpy-dtypes, but evidently didn't do it right, or it just doesn't work.  I was using `PyImport_Import` with a PyString.  Now, going back to the original `PyImport_ImportModule` with a literal `char*`, everything seems to work great (for me at least; Travis isn't so sure...).

Thanks very much!

> From: ian.g.kelly at
> Date: Mon, 20 Oct 2014 17:48:23 -0600
> Subject: Re: Simple import in python 3 errors with complaint about bytes
> To: python-list at
> On Mon, Oct 20, 2014 at 5:29 PM, Mike Boyle <moboyle79 at> wrote:
>> I'm modifying an extension written with the c-api to have a datatype of quaternions <>, with one of the goals being python 3 support. It works nicely in python 2.7, but for python 3.x gives an error that I can't find anywhere on the google. The directory looks like this:
>> .../site-packages/
>> quaternion/
>> contains a line like this:
>> from .numpy_quaternion import quaternion
>> But when it hits that line, python 3 throws its hands up in disgust:
>>> python -c 'import quaternion'
>> Traceback (most recent call last):
>> File "<string>", line 1, in <module>
>> File "/Users/mynamehere/.continuum/anaconda/envs/py3k/lib/python3.4/site-packages/quaternion/", line 3, in <module>
>> from .numpy_quaternion import quaternion
>> TypeError: __import__() argument 1 must be str, not bytes
>> The only thing before that line is `import numpy as np`, which typically works just fine. Obviously, I'm using python3.4 to compile and (attempt to) import (with a conda environment), so it's not something as dumb as using the wrong python. Also, this is the result for both me on my laptop and Travis-CI <>, so it doesn't seem to be anything peculiar to my installation. I've posted this question on stackoverflow, but haven't gotten much interest; the only responder suggested I ask here instead.
>> Any ideas what's going wrong, or where I can go from here?
> I question whether the error is really coming from that particular
> import line. Try shadowing the __import__ function to see what's
> actually being passed there. E.g.:
>>>> orig_import = __import__
>>>> def debug_import(name, globals=None, locals=None, fromlist=(), level=0):
> ... print("debug_import:", name, globals, locals, fromlist, level)
> ... return orig_import(name, globals, locals, fromlist, level)
> ...
>>>> import builtins
>>>> builtins.__import__ = debug_import
>>>> import sys
> debug_import: sys {'__spec__': None, '__loader__': <class
> '_frozen_importlib.BuiltinImporter'>, '__package__': None, 'builtins':
> <module 'builtins' (built-in)>, 'orig_import': <built-in function
> __import__>, '__builtins__': <module 'builtins' (built-in)>,
> '__name__': '__main__', '__doc__': None, 'debug_import': <function
> debug_import at 0x7f6096aac9d8>} {'__spec__': None, '__loader__':
> <class '_frozen_importlib.BuiltinImporter'>, '__package__': None,
> 'builtins': <module 'builtins' (built-in)>, 'orig_import': <built-in
> function __import__>, '__builtins__': <module 'builtins' (built-in)>,
> '__name__': '__main__', '__doc__': None, 'debug_import': <function
> debug_import at 0x7f6096aac9d8>} None 0
> --

More information about the Python-list mailing list