我已经将导入问题简化为这个简单的基本情况。假设我有一个Python包:
mypkg/
__init__.py
a.py
b.py
a.py包含:
def echo(msg):
return msg
b.py包含:
from mypkg import a # possibility 1, doesn't work
#import a # possibility 2, works
#from mypkg.a import echo # import also fails
print(a.echo())
在Python 2.7.6和Python 3.3.5上运行python b.py
会产生ImportError: No module named mypkg
。我也试过在两种情况下添加from __future__ import absolute_import
,相同的问题。
我希望可能性1能正常工作。
可能性2不太可取。假设,标准库可以引入一个名为a
的包(在本例中不太可能,但您已经知道了)。当Python 2搜索current package first时,Python 3+包含绝对导入更改,以便首先检查标准库。
不管我的理由是什么,可能性1应该是有效的,不是吗?我发誓我以前做过几千次。
注意:如果您在mypkg
外部编写脚本,from mypkg import a
可以正常工作。
我的问题类似于python - absolute import for module in the same directory,但作者暗示我所拥有的应该是有用的。
from mypkg import a
是正确的形式。不要从Python包目录中运行脚本,它使用多个可能导致错误的名称使同一个模块可用。从包含mypkg
的目录运行python -m mypkg.b
。为了能够从任何目录运行,
mypkg
应该在pythonpath中。我认为问题来自于这样一个事实,即您没有对mypkg文件夹中的mypkg的引用。当我尝试运行您的示例时(使用verbose选项),看看Python正在做什么:
这就是为什么它能找到模块,因为它不存在。你可以做的一件事是用一个名为mypkg.py的文件
但这只是你穿上另一件夹克的第二种可能性。在不知道您想要完成什么的情况下,我将选择Intra-package Reference文本上的第一个示例。我会这样写:
试试这个:
相关问题 更多 >
编程相关推荐