模块导入自己

时间:2013-12-19 16:23:44

标签: python module importerror self-reference

我正在尝试从特定于应用程序的终端导入模块(在这种情况下是Maya,但最终是其他终端)。我已经从git下载了一个项目,我有一个像这样的结构:

modulename
    submodule
        __init.py__
        subsubmodule
        ...
    submodule
    ...
    __init.py__
    modulename.py

然后在我的执行shell中,我正在尝试导入模块以在shell上使用,所以我有:

import sys,os
modulepath = 'C:/path/to/module'
sys.path.append(modulepath)
import modulename

如果导入的modulename.py为空,则一切正常。 然而,该模块的前两行是试图导入自己的模块(我真的不知道为什么,因为这是别人的项目,但它似乎对结构很重要)

import sys,os
import modulename from modulename as mod

这会收到错误:

# Error: ImportError: cannot import name modulename# 

其他任何事情都无法进行。

最终我想知道为什么一个模块无法导入自己,和/或如何解决这个问题?

我已经读过一个模块认为自己被命名为 main ,因此相对导入不起作用,在这种情况下我会期望

import __main__ as mod

代替它工作,但也没有,错误:

# Error: ImportError: Cannot re-init internal module __main__ #

这完全有道理。

[问题是,如何从内部导入模块?]

1 个答案:

答案 0 :(得分:7)

这里有一个名为“modulename”的包,其中包含一个也称为“modulename”的子模块。换句话说,“modulename.modulename”。这在Python中完全有效。 modulename.py模块又尝试从包中的其他位置导入一些名为“modulename”的东西。这就是看起来像它试图从“自身”导入的原因。不可否认,这就是为什么我通常不尝试使用这样的命名;)

导入无法正常工作,因为当 添加父目录时,您正在向sys.path添加名为“modulename”的顶级。包结构很重要。

您可以告诉Python项目中的目录是一个包,因为它包含一个__init__.py文件。

顺便说一下,我不知道你试图使用什么软件,但是如果它包含了一个setup.py,你应该用它来安装它。

(顺便说一句,我不认为原始文件实际上包含import modulename from modulename as mod,因为它的语法无效。)