猿问

Python 包导入错误

比如说
test
|--a.py
|--b.py
`--__init__.py
a.py
fromtest.bimportc
print(c)
b.py
c="test"
运行a.py
python3a.py
出错
Traceback(mostrecentcalllast):
File"a.py",line1,in
fromtest.bimportc
ImportError:Nomodulenamed'test.b'
我是看官方文档的:https://docspy3zh.readthedocs.org/en/latest/tutorial/modules.html#tut-packages
为什么test没有被当成一个包呢?脚本所在的文件夹应该在搜索路径里面的呀。
虽然直接import也行,但是用包组织似乎更推荐?
如果说因为是包内平级的模块不行,但是文档里面说可以用语句来导入的:
https://docspy3zh.readthedocs.org/en/latest/tutorial/modules.html#id18
然而将a.py改成:
from.importb
print(b.c)
依然报错。
Traceback(mostrecentcalllast):
File"a.py",line1,in
from.importb
SystemError:Parentmodule''notloaded,cannotperformrelativeimport
将a.py改写成
importsys
print(sys.path)
输出:
['/home/tioover/.proj/test','/usr/lib/python3.3/site-packages/Pectin-0.9-py3.3.egg','/usr/lib/python33.zip','/usr/lib/python3.3','/usr/lib/python3.3/plat-linux','/usr/lib/python3.3/lib-dynload','/usr/lib/python3.3/site-packages','/usr/lib/python3.3/site-packages/setuptools-0.6c11.egg-info']
一只甜甜圈
浏览 594回答 2
2回答

千万里不及你

你的test的上级目录不在sys.path中。还有,不要直接执行一个包里边的文件。如果真需要执行一个包里的模块(而又不使用distribute提供的entrypoint安装配置),请使用python3-mtest.a这样子。

哆啦的时光机

因为a.py在test包内,你只要frombimportc就行了。作者用的python3,与2不同,参考楼上的答案吧。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答