我正在使用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
中有一行
但为什么这会有问题呢?在与__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
,它通常成功而没有问题。在
因为这很容易,我会首先尝试绝对导入,不过如果我下面的猜测是正确的,这将不起作用。在
从你的帖子中,我猜你的等级制度看起来像
^{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中的代码:
我用
^{pr2}$正如J.F.Sebastian在评论中指出的,对我来说出错的原因是,当我使用python3时,}。在
PyString_FromString
只是一个错误函数的{相关问题 更多 >
编程相关推荐