从执行脚本中导入Python文件

时间:2012-03-16 04:15:20

标签: python

我正在尝试从当前正在执行的python文件中导入一个python文件(名为test.py,它位于父目录中)(我称之为a.py)。我所涉及的所有目录都有一个名为init.py的文件(init的每一侧都有2个下划线)

我的问题:当我尝试导入所需的文件时,出现以下错误

  

尝试非包装中的相对导入

我在a.py中的代码:

try:
    from .linkIO can_follow # error occurs here
except Exception,e:
     print e
print success

注意:我知道如果我要创建一个名为b.py的文件并导入a.py(它本身会导入所需的python文件),那么一切正常,那么哪里出错?

例如:

b.py:

import a
print "success 2"

1 个答案:

答案 0 :(得分:3)

PEP 328中所述,所有导入必须是绝对的,以防止模块相互屏蔽。绝对意味着模块/包必须位于模块路径sys.path中。相对导入(即点数)只允许在包内明智,这意味着来自同一个包的模块想要相互导入。

所以这给你留下了以下可能性:

  1. 您创建了一个包(您似乎已经创建了包)并将包路径添加到sys。路径

  2. 您只需调整每个模块的sys.path

  3. 您将所有自定义模块放在与start-script / main-application相同的目录中

  4. 表示1.和2.您可以将一个包/模块添加到sys.path中,如下所示:

    import sys
    from os.path import dirname, join
    sys.path.append(dirname(__file__))  #package-root-directory 
    

    module_dir = 'mymodules'
    sys.path.append(join(dirname(__file__), module_dir)) # in the main-file
    

    BTW:

    from .linkIO can_follow
    

    无法正常工作!缺少import语句!

    提醒一下:如果使用相对导入,则必须使用from-version:from .relmodule import xyzimport .XYZ!