尝试使用自定义包时出现ImportError

时间:2018-07-09 10:51:29

标签: python python-import importerror

我尝试将一些脚本分组到一个包中,但是我一直都在获取ImportErrors。系统是Ubuntu 16.04,位于名为tensorflow的Anaconda环境中。我正在使用python 3.6。

我的文件结构是这样的(项目文件夹位于用户的主目录下)

-- project_folder
---- src
     |-> test.py
     |-> package
         |-> A.py
         |-> B.py
         |-> __init__.py

__init__.py导入A.pyB.py

## __init__.py contents
import A
import B

A.py中,我定义了一个打印字符串的简单测试函数:

## A.py contents
def test():
    print('import works')

当我处理测试脚本test.py时,我会使用自动完成工具向我展示测试功能。看起来像这样

## test.py contents
import package

package.A.test()

但是在执行它时,尝试导入包时出现了ImportError:

  

ImportError:没有名为“ A”的模块

我在做什么错?我必须设置PYTHONPATH吗?我尝试了here的一些解决方案,但没有一个起作用。

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要相对导入,否则解释器将在A中的所有目录中搜索sys.path,该目录在标准文件夹中包含../src。这就是为什么您导入错误。

## __init__.py contents
from . import A
from . import B

答案 1 :(得分:1)

您可以尝试执行此操作(直接导入您的模块):

## test.py contents
import package.A

package.A.test()

对于我来说,这样更好,因为您知道模块的来源,并且不需要修改__init__.py文件。

或者您需要将模块包含到__all__变量中:

## __init__.py contents
import A
import B

__all__ = ['A', 'B']