当我为Addons odoo开发rest API时,设置导入并遇到问题
导入“odoo.addons.base_rest.controllers”无法解决。皮兰斯(报告缺少进口)
这是我的代码的一部分
from odoo.addons.base_rest.controllers import main
class PrivateApiController(main.RestController):
_root_path = '/api/private/helpdesk/'
_collection_name = "private.helpdesk.service"
以及所有使用 from odoo.addons.[module_name] import main 的代码遇到问题Pylance(reportMissingImports)但是当它运行时,并不重要
我使用 .env,我的文件结构是:
├── my_addons
│ ├── api_ticket [my addons that i develop and get problem Pylance Missing Report ]
| | ├── controllers
| | │ ├── controllers.py
| | │ ├── __init__.py
| | │ ├── main.py
| | │ └── __pycache__
| | ├── datamodels
| | │ ├── __init__.py
| | │ ├── __pycache__
| | │ └── ticket_datamodel.py
| | ├── demo
| | │ └── demo.xml
| | ├── __init__.py
| | ├── __manifest__.py
| | ├── models
| | │ ├── __init__.py
| | │ ├── models.py
| | │ └── __pycache__
| | ├── __pycache__
| | │ └── __init__.cpython-38.pyc
| | ├── security
| | │ └── ir.model.access.csv
| | ├── services
| | │ ├── __init__.py
| | │ ├── __pycache__
| | │ └── ticket_service.py
| | └── views
| | ├── templates.xml
| | └── views.xml
│ ├── auth_api_key
| ├── base_rest [one of the imported modules and has been installed into the main odoo]
...
│ ├── helpdesk_type
│ my_odoo.conf
├── odoo-14.0 -> ~/P/OdooProject/odoo_base/odoo-14.0 [main odoo]
| ├── LICENSE
| ├── MANIFEST.in
| ├── odoo
| │ ├── addons
| │ ├── api.py
...
| └── setup.py
├── requirements.txt
├── runserver.sh
└── venv14 -> ~/P/OdooProject/odoo_base/venv14
然后是我的setting.json
{
"python.analysis.extraPaths": [
"./odoo-14.0", // main odoo
"./my_addons", // include develop addons and base_rest, etc from oca
],
"python.defaultInterpreterPath": "venv14/bin/python3"
}
我尝试用谷歌搜索我的问题,发现'导入“Path.to.own.script”无法在 Ubuntu 20.04 LTS 上使用 Python 3.x 在 VS Code 中解析 Pylance (reportMissingImports)'以及解决方案之一替代方案就是在导入代码末尾添加# type:ignore。作为临时解决方案
我的问题是:
Odoo 将插件动态加载为命名空间包,并将它们组合到单个命名空间中。另一方面,Pylance 是静态分析器。它不执行任何 python 代码,因此技术上不可能解析这些名称。不幸的是,我认为没有解决方法。
如何组织模块结构不会影响 odoo 的组织方式和使它们可访问的方式。
每个 odoo 模块始终在
odoo.addons
命名空间内可用。
你的语法对我来说看起来是正确的,我认为你的模块是在 base_rest
之前加载的,所以它还无法访问。您是否在 base_rest
文件中添加了 __manifest__.py
作为依赖项?
根据您调用导入的项目深度,在您的设置项目中尝试以下操作: “设置”: { “python.autoComplete.extraPaths”:[ “/opt/odoo10/odoo”, “……”, “...”, “..”,
],
"python.analysis.extraPaths": [
"/opt/odoo10/odoo",
"....",
"...",
"..",
],
}