【问题标题】:ModuleNotFoundError: No module named after calling a script from another scriptModuleNotFoundError:没有从另一个脚本调用脚本后命名的模块
【发布时间】:2021-09-12 06:04:21
【问题描述】:

假设我有以下文件结构:

  Package/
           __init__.py
           A.py
  B.py

__init__.py 里面我有以下内容:

__init__.py/
 import numpy as np
 import pandas as pd

然后我在 A.py 脚本中发出以下命令:

A.py/
from Package import *

但是,我收到一条错误消息,指出没有定义模块名称包。

ModuleNotFoundError: No module named Package

我认为from Package import * 意味着运行__init__.py 中的所有内容。

我可以运行 A.py 内容并按预期使用从 B.py 导入的 init。(使用 from Package import *

我正在使用 VSCode 和 Anaconda,我的操作系统是 Windows 10。

我可以每次使用以下命令将项目文件夹附加到我的 PythonPath:

sys.path.append("Path to the Package")

但我不想每次都运行这段代码。

谁能解释一下是什么问题? 这是 Python 中的一个新问题,因为我不记得过去有过此类问题吗?

【问题讨论】:

  • A.py 应该在Package 中(即包的一部分),然后在其中尝试从Package 导入所有内容。这是行不通的,即使这样做也会导致循环导入。更不用说明星进口很糟糕。
  • 好的。循环包可能是一个问题,但这里不是这种情况。但是为什么我的命令不起作用。那么如何使用我在 init.py 中导入的内容呢?这应该是一个新事物,因为这不是问题。
  • 检查您的sys.path。 Python 正在那里列出的位置搜索Packagedocs.python.org/3/library/sys.html#sys.path
  • 这能回答你的问题吗? Relative imports for the billionth time

标签: python visual-studio-code anaconda package


【解决方案1】:

在您的 A.py 脚本中,只使用 import file.py 而不要使用星号。或者,将所有文件放在第二个 Package2 目录中,然后使用 from Package2 import * from your current A.py file。

【讨论】:

    【解决方案2】:

    因为如果你运行B.pyParent folder of Package folder会被添加到sys.path中,相当于你在A.py文件中添加sys.path.append("Path to the Package")

    但是当您运行A.py 时,它会将Package folder 而不是Parent folder of Package folder 添加到sys.path

    sys.path:

    指定模块搜索路径的字符串列表。 从环境变量 PYTHONPATH 初始化,加上一个 安装依赖的默认值。

    在程序启动时初始化,此列表的第一项, path[0],是包含脚本的目录,用于 调用 Python 解释器。

    如果您在调试模式(F5)下运行python文件,并且Package folder是您工作区的子文件夹,您可以在launch.json文件中配置PYTHONPATH

      "env": {
        "PYTHONPATH": "${workspaceFolder}"
      },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 2011-06-01
      • 2022-08-02
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多