python - 在 VSCode 中构建 python 应用程序时出现 ImportError
问题描述
我是一个 python 新手,正在尝试在 VSCode 中构建一个 Github python 应用程序,链接在这里: https ://github.com/mapsme/osm_conflate
开发人员的反应不是很灵敏,而且问题也不是特定于程序,所以我在这里问。我在文件夹中创建了launch.json文件/home/janko/source/osm_conflate/.vscode/
,内容在这里:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${workspaceRoot}/conflate/conflate.py",
"console": "integratedTerminal",
"cwd": "${workspaceFolder}/conflate/",
"args": [
"-p", "/home/janko/Documents/profile.py",
"-o", "josm.osm"
]
}
]
}
我得到一个错误:
Exception has occurred: ImportError
attempted relative import with no known parent package
File "/home/janko/source/osm_conflate/conflate/conflate.py", line 8, in <module>
from .geocoder import Geocoder
我试图将 python 版本从 3 更改为 python2,但错误的文本只是改变了一点。我试图将其他文件夹放在"cwd"
属性中,但它总是一样的。我试图将其他 .py 文件放在"program"
json 的一部分中,但这没有帮助。我究竟做错了什么?
解决方案
从PEP 328 -- Imports: Multi-Line and Absolute/Relative,我们可以知道
相对导入使用模块的名称属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,它被设置为main),那么无论模块实际位于文件系统上的什么位置,相对导入都会像模块是顶级模块一样被解析。
为了解决遇到的错误,我们可以使用绝对导入而不是相对导入。
将文件夹 conflate 更改为其他名称,否则
from conflate.geocoder import Geocoder
在 conflate.py 中使用时,会抛出 cirle import 错误。复制内容,
__init__.py
然后删除。将内容粘贴到新创建的__init__.py
,然后重新加载窗口;用于
pip install lxml
将需要的模块安装到当前环境中;在 conflate.py 中,添加
sys.path.append('./')
和导入函数,如from conflate.geocoder import Geocoder
.
最后就可以成功运行 conflate.py 了:
推荐阅读
- javascript - 使用 JavaScript 列出 Json 数据
- angular - 角度11中的单元测试键盘按键事件
- webpack - 使用 Webpack 5 开发服务器的 HMR/Live Reload
- python - 如何在 pycharm 中创建 db 文件?
- python - 将对象标准化为单位球体后获取世界到相机矩阵
- javascript - JS正则表达式验证四位空间系列,1234 1234 124 1234
- npm - 全局安装 snowpack 时如何运行
- jsonnet - 使用迭代器的对象理解
- r - 为什么 dplyr::case_when() 为等效逻辑提供不同的输出,除非使用 rowwise()?
- nginx - Nginx 重定向到 Alfresco Share 的不同 ip:port/path