Python包没有模块ImportError

时间:2016-05-10 16:25:40

标签: python

环境: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

3 个答案:

答案 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