我在调试时收到导入错误主要的.py。我的 IDE Visual Studio Code 似乎无法识别我的 TREE 结构(如下所示),因为以下内容在 VSC 之外有效:
- 在虚拟环境中运行:
pipenv run python3.7 -m pset_1
在虚拟环境中调试:
pipenv run python3.7 -m pdb pset_1
发生异常:ImportError 尝试进行相对导入,但没有已知父包文件“/home/hoang/Documents/E29/pset1/2019sp-pset-1-nhvinh118/pset_1/主要的.py", 第 4 行,来自 .hash_str 导入 get_csci_salt、get_user_id、hash_str 文件“/usr/local/lib/python3.7/runpy.py”,第 85 行,在 _run_code exec(code, run_globals) 文件“/usr/local/lib/python3.7/runpy.py”,第 96 行,在 _run_module_code mod_name、mod_spec、pkg_name、script_name) 文件“/usr/local/lib/python3.7/runpy.py”,第 263 行,在 run_path pkg_name=pkg_name、script_name=fname)
__main__.py 中的 IMPORT 语句(要调试的模块)
from .hash_str import get_csci_salt, get_user_id, hash_str
from .load_data import load_vectors, load_words, load_data
树
.
|-- Dockerfile
|-- Pipfile
|-- Pipfile.lock
|-- README.md
|-- __pycache__
| `-- tokenize.cpython-37.pyc
|-- data
| |-- hashed.parquet
| `-- hashed.xlsx
|-- docker-compose.yml
|-- drun_app
|-- pipenvgraph.log
|-- pset_1
| |-- WordEmbedding.py
| |-- __init__.py
| |-- __main__.py
| |-- hash_str.py
| |-- io.py
| |-- load_data.py
| `-- tokenize.py
|-- setup.cfg
`-- tests.py
我的两个settings.json
(1)/home/hoang/.config/Code/User/settings.json
{
"python.pythonPath": "/home/hoang/anaconda3/bin/python",
"git.enableSmartCommit": true
}
(2)/home/hoang/Documents/E29/pset1/2019sp-pset-1-nhvinh118/.vscode/settings.json
{
<<<<<<< HEAD
"python.pythonPath": "/home/hoang/.local/share/virtualenvs/2019sp-pset-1-nhvinh118-a6Ueu8mF/bin/python",
"~/Documents/E29/pset1/2019sp-pset-1-nhvinh118/pset_1/."
"python.linting.enabled": true
=======
"python.pythonPath": "/home/hoang/.local/share/virtualenvs/2019sp-pset-1-nhvinh118-a6Ueu8mF/bin/python"
>>>>>>> master
}
关于我的系统
- 操作系统:Linux x64 4.15.0-45 通用(Ubuntu 18.04.2 LTS)
- IDE:Visual Studio Code v 1.31.0
- 解释器:Python 3.7.1
答案1
您可能正在将模块作为脚本而不是模块来运行。
检查您的launch.json
配置。如果不存在,请通过齿轮图标。查看官方调试文档有关如何设置的更多信息launch.json
。
并在其中为 Python 模块添加新配置。例如:
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Module",
"type": "python",
"request": "launch",
"module": "pset_1.${fileBasenameNoExtension}"
}
]
}
如果你的配置中有更多子包,我认为按照层次结构来命名它们是一个好习惯。
多个配置和子包的示例:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Module - foo", // top-level package called "foo"
"type": "python",
"request": "launch",
"module": "foo.${fileBasenameNoExtension}"
},
{
"name": "Python: Module - foo.bar",
"type": "python",
"request": "launch",
"module": "foo.bar.${fileBasenameNoExtension}"
},
{
"name": "Python: Module - foo.buzz",
"type": "python",
"request": "launch",
"module": "foo.buzz.${fileBasenameNoExtension}"
}
]
}
希望有帮助!