环境:Ubuntu 14
结构:
test
├── a
│ ├── a.py
│ └── __init__.py
├── b
│ ├── b.py
│ └── __init__.py
└── __init__.py
在“b.py”中:
import test.a.a
如果我运行“python b.py”:
Traceback (most recent call last):
File "b.py", line 1, in <module>
import test.a.a
ImportError: No module named a.a
答案 0 :(得分:1)
你有几个选择
1)将文件夹测试的路径包含到sys.path
你可以做硬编码
b.py
import sys
sys.path.append("path/to/test")
import test.a.a
但在这种情况下,如果以后将测试文件夹更改为其他位置,则必须手动更改
您也可以使用
进行自动操作b.py
import os, sys
path = os.path.dirname( os.path.dirname( os.path.dirname(__file__) ) )
# folder_of_test/ test / b
sys.path.append(path)
import test.a.a
在这一篇中,如果您使用的是python 2,则需要先在os.path.abspath
上致电__file__
2)将test
的父文件夹添加到PYTHONPATH环境变量中,或将test
文件夹放入您的文件夹中PYTHONPATH或PATH环境变量。
这样做
$> export PYTHONPATH="/path/to/parent/folder/of/test:$PYTHONPATH"
但最有可能只是暂时的,要以永久的方式执行,请转到主文件夹中的文件.profile
或.bashrc
,并将上述说明放在最喜欢的{{ {3}}(我修改.profile来设置我的pythonpath)
3)从包含python -m test.b.b
test
在任何情况下,您都必须确保您没有其他具有相同名称的库,例如我安装了anaconda并且附带了测试包,在这种情况下,您应该将名称更改为避免混淆
答案 1 :(得分:1)
模块test
是标准库的一部分。因此,当您import test.a
时,它会尝试在其中导入a
模块。
因此,即使您找到了解决方案,也最好不要将该名称用于您的包。
答案 2 :(得分:0)
尝试:
from test.a import a
或与:
from ..a import a