我尝试将一些脚本分组到一个包中,但我总是收到导入错误。系统是Ubuntu 16.04,在一个名为tensorflow的Anaconda环境中。我正在使用python 3.6。
我的文件结构是这样的(项目文件夹在我的用户的主页目录下):
-- project_folder
---- src
|-> test.py
|-> package
|-> A.py
|-> B.py
|-> __init__.py
__init__.py
进口A.py
和B.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']