繁体   English   中英

导入模块时出现“ModuleNotFoundError”

[英]"ModuleNotFoundError" when importing modules

在以下位置提出了类似的问题: Python subpackage import "no module named x"但我仍然无法解决我的问题。

我第一次将我的 python 代码分成模块和包。 以下是文件的设置方式(不是真实姓名):

└── projectfolder
    |––main.py
    |––package1
        |--__init.py__
        |--module1.py
        |--subpackage1
            |--__init.py__
            |--module2.py

在 module2.py 中有一个 function(“function1”)应该在 module1.py 中的 function(“function2”)中使用。 然后应该在 main.py 中使用 Function2。

这首先是通过在 module1 中导入 suppackage1 来完成的:

import subpackage1

这是 subpackage1 中的__init__.py中的代码:

from.module2 import function1

然后在位于 module1.py 中的 function2 中使用 Function1,如下所示:

subpackage1.function1()

这不会创建任何错误消息。 但是现在我想在 main.py 中调用 function2。 Package1 像这样导入到 main.py 中:

import package1

这是 package1 中的__init__.py文件中的代码:

from.module1 import function2

然后我期待我可以像这样在 main.py 中毫无问题地使用 function2:

package1.function2()

但是当从 main.py 运行代码时,我收到此错误消息:

错误:

"Inside main.py" import package1
"Inside __init__.py which lies in package1" from .module1 import function2
"Inside module1.py" ModuleNotFoundError: No module named 'subpackage1'

我做错了什么? 有没有更好的方法来组织包和模块? 因为这已经很难只用几个文件来管理了。

简要地:

当您运行main.py时,您的subpackage1不在 scope 中,因此您无法使用import subpackage1导入它。 有关此主题的更多信息,请参见此处

考虑像这样重写import subpackage1

from package1 import subpackage1

或者将它添加到PYTHONPATH env 变量中,但我个人觉得那样更混乱

从这个答案来看,Python 中没有真正的子包,因为所有 package 引用都转到全局字典,这意味着没有本地字典,这意味着无法管理本地 package 引用。

您必须使用完整前缀或短前缀或别名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM