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 |
你的结构很好。