尝试使用自定义包时出现导入错误



我尝试将一些脚本分组到一个包中,但我总是收到导入错误。系统是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()

但是在执行它时,我在尝试导入包时收到导入错误:

导入错误:没有名为"A"的模块

我做错了什么?我必须设置 PYTHONPATH 吗?我从这里尝试了一些解决方案,但没有一个奏效。

谢谢!

你需要相对导入,否则解释器将在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']

相关内容

最新更新