我正在尝试从特定于应用程序的终端(本例中是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__ #
完全有道理。
[问题是,如何从模块内部导入模块?]
这里有一个名为“modulename”的包,其中包含一个子模块,也称为“modulename”。换句话说,“modulename.modulename”。这在Python中是完全有效的。py模块反过来试图从包中的其他地方导入一些东西,也称为“modulename”。这就是为什么它看起来像是试图从自身导入。不可否认,这就是为什么我自己通常不使用这样的命名;)
导入无法工作,因为在添加父目录时,您正在将名为“modulename”的顶级包添加到sys.path。包装结构很重要。
您可以告诉Python项目中的目录是一个包,因为它包含一个
__init__.py
文件。更新:当我第一次写这篇文章时,它是针对Python 2.x的。在Python 3中,包含Python模块的目录被自动当作一个包来处理,不管是否有
__init__.py
。顺便说一句,我不知道你想用什么软件,但很可能它包含一个setup.py,你应该用它来安装它。
(顺便说一下,我不认为原始文件实际上包含
import modulename from modulename as mod
,因为这是无效语法。)相关问题 更多 >
编程相关推荐