我尝试将一些脚本分组到一个包中,但是我一直都在获取ImportErrors。系统是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()
但是在执行它时,尝试导入包时出现了ImportError:
ImportError:没有名为“ A”的模块
我在做什么错?我必须设置PYTHONPATH吗?我尝试了here的一些解决方案,但没有一个起作用。
谢谢!
答案 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']