Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python导入错误解决方案。(需要更好的方法)_Python_Python 3.x_Module_Package - Fatal编程技术网

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
    README.md
    等等。我们不在这里放任何代码,因为我们不希望此文件夹被视为一个包(没有dunder init文件)
  • 我们创建了第二个文件夹,名称相同,但小写(
    project
    ),这是主
    python包
    ,我们在这里放了一个dunder init文件。这是我们所有进口商品的基地
  • 然后,在每次导入时,我们定义如下完整路径:
    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。如果这是错误的情况,我将更改它