如何从包“main”模块中导入包模块

时间:2013-12-10 14:32:29

标签: python

我的包结构是:

main.py
mapp/
   __init__.py
   core/
     __init__.py
     tobeimported.py
   test/
     __init__.py
     (test modules)
   utils/
     __init__.py
     blasttofasta.py

文件 blasttofasta.py 以脚本形式执行。

blasttofasta.py 看起来像:

import mapp.core.tobeimported

def somefunc():
   pass


if __name__ == '__main__':
  pass

但是发生了异常:

Traceback (most recent call last):
  File "utils/blasttofasta.py", line 5, in <module>
    import mapp.core.tobeimported
ImportError: No module named mapp.core.analyzers

如何导入 tobeimported 模块?我从顶级目录(main.py所在的位置)运行blasttofasta.py

编辑:也许更好的问题是:如何将mapp包发送到sys.path?因为脚本文件只能看到自己的目录而不是包目录。

谢谢

3 个答案:

答案 0 :(得分:1)

如果我想包括blasttofasta.py或同时将其作为脚本运行,那么重要的是在sys.path中包含包含mapp包的目录。

这对我有用:

在导入mapp(或此软件包中的其他模块)之前,我写入了blasttofasta.py:

import os
os.sys.path.append(os.path.dirname(os.path.realpath(__file__))+ '/../../')

这附加了mapp包路径,我可以将其作为脚本运行。另一方面没有问题包含在另一个包中。

答案 1 :(得分:0)

按照绝对结构导入。

在tobeimport.py中导入blasttofasta.py

ToBeimport内容

from myapp.utils import blasttofasta

你的结构很好。

答案 2 :(得分:0)

需要做两件事:

  • 您的map目录需要__init__.py个文件。

你可以这样做(天真地):

$ touch /path/to/map/__init__.py
  • /path/to/map需要位于sys.path

请阅读:http://docs.python.org/2/tutorial/modules.html了解更多详情。