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