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

ImportError while trying to use custom package

我尝试将一些脚本分组到一个包中,但我总是遇到 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: No module named 'A'

我做错了什么?我必须设置 PYTHONPATH 吗?我尝试了 here 中的一些解决方案,但其中 none 有效。

谢谢!

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

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

你可以试试这个(直接导入你的模块):

## test.py contents
import package.A

package.A.test()

对我来说,这种方式更好,因为你知道你的模块来自哪里,你不需要修改 __init__.py 文件。

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

## __init__.py contents
import A
import B

__all__ = ['A', 'B']