Python导入错误解决方案。(需要更好的方法)
我的目录结构是这样的Python导入错误解决方案。(需要更好的方法),python,python-3.x,module,package,Python,Python 3.x,Module,Package,我的目录结构是这样的 ├── server.py └── Utils ├── A.py ├── __init__.py ├── B.py 在server.py中,有一个导入 from Utils.B import SomeClass 在B.py中还有一个导入 from .A import SomeClass 运行server.py时,它运行正常。但是在Utils内部运行B.py时,它抛出了错误: ModuleNotFoundError: No module name
├── server.py
└── Utils
├── A.py
├── __init__.py
├── B.py
在server.py中,有一个导入
from Utils.B import SomeClass
在B.py中还有一个导入
from .A import SomeClass
运行server.py时,它运行正常。但是在Utils内部运行B.py时,它抛出了错误:
ModuleNotFoundError: No module named '__main__.A'; '__main__' is not a package
然后删除点并运行,B.py工作正常,但server.py抛出错误。
有什么解决方案可以同时运行两者吗?我会尽量远离相对导入(那些具有前导
的导入)
通常良好的文件结构如下所示:
Project
├── setup.py
├── README.md
└── project
├── __init__.py
├── server.py
└── Utils
├── __init__.py
├── A.py
└── B.py
这里的主要收获是:
- 有一个名为
的主文件夹保存着所有文件Project
- 我们将所有元文件直接放在其中,比如
和setup.py
等等。我们不在这里放任何代码,因为我们不希望此文件夹被视为一个包(没有dunder init文件)README.md
- 我们创建了第二个文件夹,名称相同,但小写(
),这是主project
,我们在这里放了一个dunder init文件。这是我们所有进口商品的基地python包
- 然后,在每次导入时,我们定义如下完整路径:
from project.Utils.A import SomeClass
- 如果希望从包中轻松导入该类,则可以在第一个dunder init文件中编写来自project.Utils.A import SomeClass,然后在需要时执行来自project import SomeClass
这个答案也很好,而且很相关:我使用了文件结构。现在它显示了:Traceback(最近一次调用last):文件“server.py”,第1行,from demo.utils.b import b ModuleNotFoundError:在您的示例中,没有名为“demo”的模块,您已经大写了
utils
和b.py
,如果不是这样的话,那么如果您不显示确切的结构和代码,我就无法真正帮助您,在这种情况下,你必须问另一个问题——结构是一样的。我只是把一些函数改成了B,把utils改成了utils。如果这是错误的情况,我将更改它