Visual Studio Code“没有已知父包文件的相对导入”

Visual Studio Code“没有已知父包文件的相对导入”

我在调试时收到导入错误主要的.py。我的 IDE Visual Studio Code 似乎无法识别我的 TREE 结构(如下所示),因为以下内容在 VSC 之外有效:

  1. 在虚拟环境中运行:pipenv run python3.7 -m pset_1
  2. 在虚拟环境中调试: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}"
        }
    ]
}


希望有帮助!

相关内容