2013-12-19 43 views
1

我想从应用程序特定的终端(在这种情况下,玛雅人,但最终其他人)导入模块。我下载了一个项目关闭混帐,我有一个结构,像这样:模块导入本身

modulename 
    submodule 
     __init.py__ 
     subsubmodule 
     ... 
    submodule 
    ... 
    __init.py__ 
    modulename.py 
在我执行壳

于是,我试图导入到外壳上使用的模块,所以我必须:

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# 

,并没有别的可以继续进行。

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

我已阅读,模块认为它自己被命名主要使相对进口不工作,在这种情况下,我希望

import __main__ as mod 

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

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

这是总的意义。

[现在的问题是,我怎么能导入模块从内部本身?]

+0

你尝试'从MODULENAME进口MODULENAME为mod'? –

+0

是的,与第一个错误相同的ImportError。 –

回答

5

你在这里什么是所谓的“模块名”包包含一个子模块也称为“模块名”。换句话说,“modulename.modulename”。这在Python中是完全有效的。 modulename.py模块反过来试图从包中的其他地方导入一些东西,也称为“模块名”。这就是为什么它看起来像它试图从“本身”导入。诚然混淆这就是为什么我平时尽量不使用命名这样我自己;)

进口不工作,因为你要添加的顶级所谓的“模块名”包到sys.path中,当你应该加入父目录。包装结构非常重要。

你可以告诉Python项目中的目录是一个包,因为它包含一个__init__.py文件。顺便说一句,我不知道你要使用什么软件,但是如果没有机会,它会包含一个setup.py文件,你应该使用它来安装它。

(顺便说一句,我不相信原来的文件实际上包含import modulename from modulename as mod因为这是无效的语法。)

+0

那么,它是如何建立起来的,但是这个项目本身就是另一种语言的端口,在这个过程中被抛弃了,我试图恢复它,所以也许有人留下了一些没有工作的东西。当我试图分析正在发生的事情并以目录方式维护当前的项目结构时,对于导入行为,您会提出什么样的语法? –

+0

据我所知,虽然你的答案是全面的,但我似乎无法基于“modulename.modulename”方面导入。我只是得到相同的ImportErrors。 –

+0

嗯,我想我设法使它或多或少的工作,虽然我似乎无法访问子包。 我会试着独立解决这个问题,因为这在技术上是一个不同的问题。谢谢。 –