python3模块导入错误,找不到模块:ModuleNotFoundError: No module named 'Scripts'?

我的文件目录是这样的:
Snipaste_2024-02-11_17-23-36.png

SSDTTime.py文件的首行是引入Scripts文件夹里面的文件,是这样写的:

from Scripts import downloader, dsdt, plist, reveal, run, utils
//...

Scripts文件夹里面是这样的:
Snipaste_2024-02-11_17-24-13.png

我在powershell里面运行SSDTTime.py文件,出现如下错误,找不到Scripts模块:

PS D:\blackMac\SSDTTime> python SSDTTime.py
Traceback (most recent call last):
  File "D:\blackMac\SSDTTime\SSDTTime.py", line 1, in <module>
    from Scripts import downloader, dsdt, plist, reveal, run, utils
ModuleNotFoundError: No module named 'Scripts'

大佬帮解释一下怎么回事。

阅读 1.3k
avatarAI BotBETA

首先,Python 在导入模块时,会从以下位置查找模块:

  1. 当前目录
  2. PYTHONPATH 环境变量指定的目录
  3. 默认安装的库目录

在你的情况下,Python 在运行 SSDTTime.py 文件时,它在你的当前目录(也就是 D:\blackMac\SSDTTime)中找不到 Scripts 模块,因此引发了 ModuleNotFoundError

解决方案有以下几种:

  1. 更改工作目录:你可以将你的工作目录更改为包含 Scripts 文件夹的目录。在 PowerShell 中,你可以使用 cd 命令来更改工作目录,例如:
cd D:\blackMac

然后,你可以在新的工作目录中运行你的 Python 脚本。

  1. 添加脚本的父目录到 PYTHONPATH:你也可以将你的脚本的父目录添加到 PYTHONPATH 环境变量中。这样,Python 将在该目录中查找模块。你可以在 PowerShell 中使用以下命令添加目录:
$env:PYTHONPATH = $env:PYTHONPATH + ";D:\blackMac"

然后,你可以在任何地方运行你的 Python 脚本,而无需更改工作目录。

  1. 更改模块导入语句:如果你的目标是将 Scripts 作为一个包来使用,那么你可能需要更改你的导入语句。如果 Scripts 是一个包,那么它应该包含一个 __init__.py 文件(即使它是空的)。然后,你可以使用以下语句导入包中的模块:
from Scripts import downloader, dsdt, plist, reveal, run, utils

如果 Scripts 不是一个包,而是一个包含多个 .py 文件的文件夹,那么你应该使用以下语句导入模块:

from Scripts.downloader import downloader
from Scripts.dsdt import dsdt
from Scripts.plist import plist
from Scripts.reveal import reveal
from Scripts.run import run
from Scripts.utils import utils

注意:Python 的模块导入机制依赖于文件系统结构。如果你的文件系统结构不符合 Python 的预期,那么可能会出现导入错误。

1 个回答

import Scripts 会从 python 的 import path 里查找 module 。但是程序运行目录、脚本所在目录通常并不在 import path 中。所以就找不到了。

可能的解决方案:

  • import 之前,把 Scripts 的父目录加入 sys.path 列表中。
  • 在启动前设置 PYTHONPATH 环境变量,加入 Scripts 的父目录。
  • 使用相对路径导入 import .Scripts
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏