python - 导入 python 3 提示参数为 str/bytes

标签 python python-2.7 python-3.x python-import python-c-api

我一直在 updating a quaternions package用于与 numpy 集成,以便它可以在 python 2 和 python 3 中使用。不幸的是,基本导入步骤在 3.x 中失败得很惨,尽管它在 python 2.7 中从未失败过。 (我用python2.7编译2.7版本,用python3.x编译3.x版本,distutils真的很简单。)错误信息甚至没有出现在google的结果中,我就是不知道从这里去哪里。

以下是导入包的简单尝试的完整输出:

> 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

正如错误信息所说,__init__.py 中有一行是这样说的

from .numpy_quaternion import quaternion

但为什么会有问题呢?在__init__.py文件的同一目录下有一个文件numpy_quaternion.so,里面好像有相关的符号。 Travis-CI显示它在 2.7 中工作正常(其他测试通过),但在 3.2 和 3.4 中失败。所以这不仅仅是我的 python 安装有问题。我试图删除相对导入的 .,但 python 找不到要从中导入的 numpy_quaternion(不足为奇)。我尝试将其更改为 from quaternion.numpy_quaternion,但我遇到了同样的错误。

我看到了 there have been changes to the import system in python 3 ,但如果有的话,我会猜到这将比其他方式 py3k 兼容。出了什么问题?我怎样才能让它发挥作用?

澄清一下,我的层次结构如下所示:

.../site-packages/
    quaternion/
        __init__.py
        numpy_quaternion.so

唯一出现在有问题的行之前的是 import numpy as np,它通常可以毫无问题地成功。

最佳答案

python-list 人员立即给我回复了很好的建议。原来我在 numpy_quaternion.so 中导入了一些东西(使用 c-api),但是我给那个函数的参数是错误的。我(基本上)使用来自 a similar package 的代码:

PyObject* numpy_str = PyString_FromString("numpy");
PyObject* numpy = PyImport_Import(numpy_str);

我通过使用修复了它

PyObject* numpy = PyImport_ImportModule("numpy");

正如 J. F. Sebastian 在评论中指出的那样,对我来说出错的原因是 PyString_FromString 只是错误函数的 #define 当我正在使用 python 3。

关于python - 导入 python 3 提示参数为 str/bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26470874/

相关文章:

python - 在 Python 中隐藏代码或阻止代码编辑

python - 用于橡皮筋的鼠标左键和用于平移 PYQT 的中间键

python - 切片 Python 字符串

python - python中round()函数舍入变化的确切临界值是多少?

python - 修改字典中的嵌套值

python - 在 Python 中写入(而不是)全局变量

python - 如何根据Python中的字符数分割文本文件

python - 在 TensorFlow 中使用循环填充矩阵

python - 如何在python中填充字典?

python - mypy 和分发命名空间包