python3中的Import抱怨参数为str/bytes

2024-06-07 16:11:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用updating a quaternions package与numpy集成,以便它可以在python2和python3中使用。不幸的是,对于3.x,基本导入步骤失败得很惨,尽管在Python2.7中从未失败过。(我使用python2.7编译2.7版本,python3.x编译3.x版本。这是一个非常简单的distutils东西。)错误消息甚至没有出现在谷歌的结果中,我只是不知道该怎么做。在

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

> 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中有一行

^{pr2}$

但为什么这会有问题呢?在与__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,它通常成功而没有问题。在


Tags: inpyimport版本numpy消息init错误
2条回答

因为这很容易,我会首先尝试绝对导入,不过如果我下面的猜测是正确的,这将不起作用。在

from quaternion.numpy_quaternion import quaternion

从你的帖子中,我猜你的等级制度看起来像

^{pr2}$

四元数是一个模块,而不是一个函数或类。我猜测这是因为我无法想象“numpy四元数”变成字节,而.so必须将“四元数”作为字节返回,以便2.7才能正常工作,所以3.x可能也会这样做。我的unix经验早于Python。但我的印象是,2.x和3.x是分开的,如果不是,可能需要某些编译标志。如果我是正确的,你需要添加'numpy四元数_3x.so到你的包,并打开导入系统版本[0]。在

如果您在这里没有得到更多的响应,请尝试python list,可以在新闻gmane.com作为新闻组镜像gmane.comp.python.概述。常规的响应者包括一些精明的linux用户。在

python列表上的人马上给了我很好的建议。{I>在函数中使用的是错误的。我(基本上)在使用a similar package中的代码:

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

我用

^{pr2}$

正如J.F.Sebastian在评论中指出的,对我来说出错的原因是,当我使用python3时,PyString_FromString只是一个错误函数的{}。在

相关问题 更多 >

    热门问题