我的包结构是:
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
谢谢
答案 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
from myapp.utils import blasttofasta
你的结构很好。
答案 2 :(得分:0)
需要做两件事:
map
目录需要__init__.py
个文件。你可以这样做(天真地):
$ touch /path/to/map/__init__.py
/path/to/map
需要位于sys.path