模块导入,但没有任何属性

2024-10-03 19:28:58 发布

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

我正在尝试导入一个Python模块(fiasco)。我从GitHub克隆了它,一切看起来都很好。导入它是可行的,但是当我尝试键入时,例如iron = fiasco.Element('iron', [1e4, 1e6, 1e8]*u.K),我得到了错误module 'fiasco' has no attribute 'Element'。我正在使用Spyder的iPython控制台。如果我从终端启动iPython,这也会失败,但是如果我从终端启动python3,这会起作用

我在两台不同的计算机上完成了这项工作——在一台计算机上,它一开始可以工作,但在我重新启动内核后,开始给我相同的错误。另一方面,它根本不起作用

如果有帮助的话:导入后,我尝试键入fiasco。当我在它最初工作的计算机上这样做时,输出是<module 'fiasco' from '/Users/shirman/fiasco/fiasco/__init__.py'>。现在,在它从未工作过的计算机上,它只是说<module 'fiasco' (namespace)>。也许这和路径有关

添加:sys.path指向/Users/shirman,并且在/Users/shirman/anaconda3内有几个路径。fiasco文件夹位于/Users/shirman


Tags: 模块路径github终端键入计算机错误ipython
1条回答
网友
1楼 · 发布于 2024-10-03 19:28:58

由于sys.path设置,您无意中创建了命名空间包。命名空间包是Python搜索路径中没有__init__.py的目录,允许从不同路径加载子模块或-包(例如path1/foo/a.pypath2/foo/b.py可以作为foo.afoo.b导入)

问题是import fiasco首先找到/Users/shirman/fiasco,并将其作为命名空间包导入。如果您将sys.path设置为/Users/shirman/fiasco/Users/shirman之前,导入器将首先找到实际的包/Users/shirman/fiasco/fiasco

名称空间包是Python3.3的一个特性,因此要么另一台机器有不同的sys.path设置,要么是非常旧的Python3安装,要么是您使用的是Python2

相关问题 更多 >