模块导入its

2024-10-01 11:30:39 发布

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

我正在尝试从特定于应用程序的终端(本例中是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__ #

完全有道理。

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


Tags: 模块path项目pyimport终端initos
1条回答
网友
1楼 · 发布于 2024-10-01 11:30:39

这里有一个名为“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,因为这是无效语法。)

相关问题 更多 >