无法从文件夹导入模块。

5
我正在使用VSCODE作为我的编辑器,使用Python 3.7版本。 我的文件夹结构如下:
project
|-- util
   | -- drivers.py
   | -- data.py
   | -- __init__.py
|-- test
   | -- driver_test.py
   | -- __init__.py
main.py

我希望从util文件夹中导入drivers.py到driver_test.py中。 我尝试了基本的导入,如下所示:
from util.drivers import Driver

由于找不到util模块,第一种方法并没有生效,所以我采用了另一种方式,在sys.path中添加一个文件夹。像这样:

# driver_test.py
sys.path.append(os.path.abspath('./util'))
import drivers

我对几个输出错误感到非常困惑。 当我从控制台运行我的单元测试时,我会收到找不到驱动程序的错误。

import drivers
ModuleNotFoundError: No module named 'drivers'

如果我在 VSCode 编辑器中右键运行测试文件 Run current test file,则错误输出与包含在 drivers.py 文件中的 Selenium 驱动程序未找到有所不同。

from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'

Selenium模块实际上运行良好,我只是想为它编写一些单元测试。我做错了什么,这该如何解决?是否可以通过使用import而不是sys.path来包含一个模块。


你是如何运行你的代码的?使用的是哪个版本的Python? - Code-Apprentice
你可能需要按照这里所述设置PYTHONPATH。 - Code-Apprentice
1
@Alexander 将 __init__.py 添加到测试文件夹并没有起作用,我是通过在 vscode 中右键单击运行我的测试,并尝试通过控制台运行。 - Andrew
如果您想修改 sys.path,则不要将包添加到其中,而是添加包含包的目录。在您的情况下,我认为 sys.path.append(os.path.abspath('.')) 已经足够了,但更健壮的方法是相对于 __file__ 属性计算路径。例如,sys.path.append(os.path.abspath(os.path.join(__file__, os.pardir))) - 这样路径就不会因为从另一个目录运行测试等原因而改变。 - hoefling
1个回答

1

我想知道为什么 sys.path 不起作用,并且一直显示找不到 selenium 模块的错误。 - Andrew
1
@Andrew,很有可能VSCode正在使用不同的Python解释器,并在其目录中安装了不同的模块。打开命令面板(Ctrl + Shift + P),选择“Python:选择解释器”。检查它是否是您要查找的Python版本。作为最坏的情况,针对Selenium相关错误通过PIP重新安装模块。 - peki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接