python - 使用 __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'。
注意:可视代码将文件夹识别为模块,因此我只在运行时收到错误。
我跟着这个答案链接,这是最适合我的。
这里有什么问题?
解决方案
TLDR:将您的程序作为其软件包的一部分运行:
$ python3 -m application.folder.file
模块的搜索路径来自主脚本等。跑步
$ python3 application/folder/file.py
表示搜索路径在里面application/folder
——没有application
模块的地方。
由于应用程序似乎无论如何都打算作为一个包,请使用-m
开关将您的文件作为包结构的一部分运行:
$ python3 -m application.folder.file
这将查找application
包(包括当前目录)并递归遍历到.folder
and .file
。这保证了导入路径与包布局匹配。
要从包含. application
_ _PYTHONPATH
application
$ export PYTHONPATH=$(PYTHONPATH):/path/to/parent_of_application
$ python3 -m application.folder.file
推荐阅读
- ios - 在 UINavigationBar 下永久创建视图
- css - Sass @use 不加载部分
- typescript - Nuxt TypeScript 错误:nuxt:typescript 找不到模块'@/my-module'
- node.js - 如何在nodejs的控制器内调用multer中间件?
- facebook - PSID 不支持 GET 请求 Graph API?
- xpath - c# html agility pack 从 html 源代码中提取字符串
- reactjs - REACT 导入 css 和 js 文件
- c# - .NET 中是否存在等效的 Trie 数据结构?
- ios - 如何在swiftui中处理RotationGesture的角度
- pyspark - 如何从文本中查找数字