我程序的基本结构如下:
top_dir
__init__.py
readme.rst
sub_dir
__init__.py
sub_sub_dir
__init__.py
example_module.py
sub_sub_dir2
__init__.py
module_with_import.py
在Pycharm中,所有导入工作正常。例如,我在'module_with_import.py'中使用以下导入:
from sub_dir.sub_sub_dir.example_module import function
但是如果我在module_with_import.py上运行pylint,我将收到以下错误:
Unable to import 'sub_dir.sub_sub_dir.example_module' (import-error)
有人看到这里有什么问题吗?
答案 0 :(得分:4)
模块(包)名称中不能包含减号。将Sub-dir
重命名为sub_dir
,将Sub-sub-dir
重命名为sub_sub_dir
,将Sub-sub-dir2
重命名为sub_sub_dir2
。
答案 1 :(得分:1)
top_dir和sub_dir的名字是一样的吗?如果是这样,并且top_dir中没有要导入的文件(仅包含在该目录中的模块),请删除__init__.py
& __init__.pyc
个文件,然后重试。
想象一下以下情况:
foo
__init__.py
foo
__init__.py
bar
__init__.py
baz.py
如果您的导入语句类似于import foo.bar.baz
或from foo.bar import baz
,并且您从顶级“foo”运行脚本,则导入将失败because python importing places the current directory in sys.path。您需要告诉python顶级不是模块,或者您需要将所需的路径插入到sys.path中。