首页 > 解决方案 > 使用 __init__.py 从不同文件夹导入文件在运行时不起作用

问题描述

这是我第一次尝试从不同的文件夹导入。结构如下:

application
  │
  ├── __init__.py
  │
  ├── folder
  │     ├── file.py
        │
        └── __init__.py
  │ 
  └── folder2
      ├── some_file.py  
      │
      └── __init__.py

我想将 some_file 导入到我尝试做的 file.py 中from application.folder2 import some_file,但它不起作用:ModuleNotFoundError: No module named 'application'。

注意:可视代码将文件夹识别为模块,因此我只在运行时收到错误。

我跟着这个答案链接,这是最适合我的。

这里有什么问题?

标签: pythonpython-importimporterror

解决方案


TLDR:将您的程序作为其软件包的一部分运行:

$ python3 -m application.folder.file

模块的搜索路径来自主脚本等。跑步

$ python3 application/folder/file.py

表示搜索路径在里面application/folder——没有application模块的地方。

由于应用程序似乎无论如何都打算作为一个包,请使用-m开关将您的文件作为包结构的一部分运行:

$ python3 -m application.folder.file

这将查找application包(包括当前目录)并递归遍历到.folderand .file。这保证了导入路径与包布局匹配。

要从包含. application_ _PYTHONPATHapplication

$ export PYTHONPATH=$(PYTHONPATH):/path/to/parent_of_application
$ python3 -m application.folder.file

推荐阅读