尝试使用自定义包时出现 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.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: 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']
我尝试将一些脚本分组到一个包中,但我总是遇到 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: 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']