与目录同名的Python导入类

发布于 2021-01-29 16:51:01

可以说我有以下python源文件布局:

lib/foo.py
lib/foo/bar.py

然后在我的源代码中:

from foo import gaz

我收到导入错误:

ImportError: No module named foo

我如何拥有一个.py文件和一个具有相同名称的目录,所以我可以执行以下操作:

 from foo import gaz
 from foo.bar import wakawaka

提前致谢!

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用单个导入时遇到的实际问题是由于软件包的优先级高于模块:

    请注意,使用时from package import item,项目可以是程序包的子模块(或子程序包),也可以是程序包中定义的其他名称,例如函数,类或变量。该import
    语句首先测试项目是否在包装中定义;如果不是,则假定它是一个模块并尝试加载它。如果找不到它,ImportError则会引发异常。

    无论如何,我 强烈 建议重命名文件或目录,因为您 不能
    导入多个具有给定名称的模块。发生问题是因为每个模块/包对象都存储到中sys.modules,这很简单dict,因此不能包含多个相等的键。

    特别是,假设foo.pyfoo目录位于不同的目录中(如果不是,则仍然无法导入foo.py),请执行以下操作:

    from foo import gaz
    

    它将加载foo.py并将模块放入sys.modules,然后尝试执行以下操作:

    from foo.bar import wakaka
    

    由于导入尝试使用模块foo.py而不是包,因此将失败。

    相反,如果您第一次导入foo.bar,则会发生相反的情况;导入将使用包而不是模块。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看