编程语言
首页 > 编程语言> > 在python 3中导入时抱怨参数为str /字节

在python 3中导入时抱怨参数为str /字节

作者:互联网

我已经将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(不足为奇).我尝试将其从quaternion.numpy_quaternion更改为,但出现相同的错误.

我看到的是there have been changes to the import system in python 3,但如果有的话,我会猜想它会比其他方式更符合py3k.怎么了我该如何工作?

为了澄清起见,我的层次结构如下所示:

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

出现问题的行之前唯一出现的就是将numpy导入为np,通常可以成功实现.

解决方法:

python列表中的人马上就给我很好的建议.原来我正在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在评论中指出的那样,对我来说出错的原因是,当我使用python 3时,PyString_FromString只是错误函数的#define.

标签:python-3-x,python-2-7,python-import,python-c-api,python
来源: https://codeday.me/bug/20191121/2049489.html