On Mon, Oct 20, 2014 at 5:29 PM, Mike Boyle <moboyl...@outlook.com> wrote:
> I'm modifying an extension written with the c-api to have a datatype of 
> quaternions <https://github.com/moble/numpy_quaternion>, 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/
>         __init__.py
>         numpy_quaternion.so
>
> __init__.py 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/__init__.py",
>  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 <https://travis-ci.org/moble/numpy_quaternion>, 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
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to