【问题标题】:python vscode modulenotfounderrorpython vscode模块未找到错误
【发布时间】:2021-11-18 23:38:27
【问题描述】:

我有一定的项目结构:

 - azima
   - .vscode
   - core
     - project_setup.py
   - helper
     - log_helper
   - venv

在 project_setup.py 中:

import os
import json
import numpy as np
import pandas as pd
import random
from helper.log_helper import log

if __name__ == "__main__":
    print('hello world')

在终端中运行这个文件:

(venv) rmali@rakeshmali:~/git/azima$ /home/rmali/git/azima/venv/bin/python /home/rmali/git/azima/core/project_setup.py
Traceback (most recent call last):
  File "/home/rmali/git/azima/core/project_setup.py", line 6, in <module>
    from helper.log_helper import log
ModuleNotFoundError: No module named 'helper'

我收到此错误。我究竟做错了什么?我错过了什么吗?

但是像这样运行python -m core.project_setup 可以。

【问题讨论】:

  • 你试过from .helper.log_helper import log吗?
  • @SamMatzko ImportError: attempted relative import with no known parent package 我收到此错误
  • 然后使用你的导入方法(from helper.log_helper import log),但在它之前输入sys.path.append(os.path.dirname(os.path.dirname(__file__)))。这应该将azima 添加到 Python 搜索模块的路径列表中。
  • 您的目录结构中有__init__.py 脚本吗?这些会告诉 Python 您将文件夹视为包和子包。
  • 可能与stackoverflow.com/questions/40185437/… 相关,如果您安装了多个 python 并且 VSCode 选择了一个默认的 python 解释器,而该解释器不是您安装要导入的模块的位置

标签: python visual-studio-code python-module


【解决方案1】:

原因:

文件夹azima 的路径不在sys.path(PYTHONPATH) 中。

解决方案:

你可以这样做来修改PYTHONPATH:

  1. 在settings.json文件中添加这些以修改终端中的PYTHONPATH

    “终端.integrated.env.windows”:{ “PYTHONPATH”:“xxx/site-packages” }

  2. 在您的工作区下创建一个.env 文件,并在其中添加这些设置以修改扩展和调试器的PYTHONPATHPYTHONPATH=xxx/site-packages

可以参考here了解这两种配置的效果。

  1. 直接在python文件中修改。在 b.py 文件中添加这些代码。

    导入系统; sys.path.append("xxx/Project/src")

【讨论】:

    【解决方案2】:

    跑步的原因

    (venv) rmali@rakeshmali:~/git/azima$ python ./core/project_setup.py
    

    失败

    (venv) rmali@rakeshmali:~/git/azima$ python -m core.project_setup
    

    成功之处在于,当运行python -m &lt;module-name 时,Python 将当前目录添加到sys.path 的开头,这允许将该目录中的模块(例如helper)作为顶级模块导入,即import helper。运行python &lt;script&gt; 不会将当前目录添加到sys.path 的开头。相反,Python 将包含脚本的目录添加到 sys.path 的开头。

    这里是文档的相关部分。

    -m switch

    与 -c 选项一样,当前目录将添加到 sys.path 的开头。

    以及-c option 添加的文档

    当前目录将被添加到 sys.path 的开头(允许将该目录中的模块作为顶级模块导入)

    python &lt;script&gt; 的文档

    如果脚本名称直接引用 Python 文件,则将包含该文件的目录添加到 sys.path 的开头,并将文件作为 __main__ 模块执行。

    如果脚本名称引用目录或 zip 文件,则脚本名称将添加到 sys.path 的开头,并且该位置的 __main__.py 文件作为 __main__ 模块执行。

    【讨论】:

      猜你喜欢
      • 2018-08-29
      • 2018-11-05
      • 1970-01-01
      • 2018-08-04
      • 2021-12-06
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2020-08-11
      相关资源
      最近更新 更多