关于python:如何从包“main”模块导入包模块

How to import package modules from in-package “main” module

我的包结构是:

1
2
3
4
5
6
7
8
9
10
11
12
main.py
mapp/
   __init__.py
   core/
     __init__.py
     tobeimported.py
   test/
     __init__.py
     (test modules)
   utils/
     __init__.py
     blasttofasta.py

文件blasttofasta.py作为脚本执行。

blasttofasta.py看起来像:

1
2
3
4
5
6
7
8
import mapp.core.tobeimported

def somefunc():
   pass


if __name__ == '__main__':
  pass

但出现异常:

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

如何导入到导入模块?我从顶部目录运行blasttofasta.py(其中main.py是)

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

谢谢你


如果我想同时包含blasttofasta.py或以脚本的形式运行它,最重要的是在sys.path中有包含mapp包的目录。

这对我很有用:

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

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

这个append mapp包路径,我可以作为脚本运行它。另一方面是没有问题的,是包含在另一个包中。


需要发生两件事:

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

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

1
$ touch /path/to/map/__init__.py
  • /path/to/map需要在sys.path

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


按照绝对结构导入。

在tobeimport.py中导入blasttofasta.py

导入内容

1
from myapp.utils import blasttofasta

你的结构很好。