在Windows系统上无法导入conftest.py

6

我对pytest和创建包(模块)还不是很熟悉。我已经在pytest中写了一些测试,但当我重构脚本结构时,这些测试就不再有效了。重构是必要的,因为有许多脚本,而且很难定位。当前目录结构如下:

C:\Users\local\workspace
         .+---tools
             +---base
                 +---__init__.py
                 +---conftest.py
                 +---script1.py
                 +---script2.py
             +---misc
                 +---__init__.py
                 +---run.py
             +---__init__.py

script1.pyscript2.py包含一些用于测试的类和特殊类。我被告知conftest.py应该位于顶层测试文件所在的相同文件夹中,因此我将其放入了base目录。

我通过以下方式从run.py运行pytest:

pytest_args = workspace + "/tools/base/script1.py "
pytest_args += workspace + "/tools/base/script2.py"
pytest.main(pytest_args)

workspace包含c:/Users/local/workspace。我收到以下错误:

Traceback (most recent call last):
  File "c:\Python27\Lib\_pytest\config.py", line 543, in importconftest
    mod = conftestpath.pyimport()
  File "c:\Python27\Lib\py\_path\local.py", line 660, in pyimport
     raise self.ImportMismatchError(modname, modfile, self)
 ImportMismatchError: ('tools.base.conftest', 'c:/Users/local/workspace\\jenkins\\tools\\base\\conftest.py', local('c:\\Users\\wokspace\\tools\\base\\conftest.py'))
 ERROR: could not load c:\Users\local\workspace\tools\base\conftest.py

我真的不知道该怎么解决这个问题。当所有脚本都在同一个文件夹中时(并且没有__init__.py),一切都很正常。其他脚本也可以正常工作(我指的是依赖项,其中一些脚本需要来自其他目录的模块),只有pytest无法正常工作。
奇怪的是,在Linux发行版上,这个问题没有出现。我猜这可能是由于Windows路径的问题,这似乎对pytest造成了真正的问题。请问你有什么解决办法吗?
谢谢

如果您删除文件base\__init__.py,会发生什么? - Bruno Oliveira
实际上这是不可能的,因为基础(base)必须是一个包(package),因为如其名称所示,它包含基本类(basic classes),这些类被其他脚本使用。我认为最好的做法是将测试类从script1.py和script2.py中移动到另一个目录(没有__init__.py),与conftest放在一起。 - user1967718
1个回答

3
我遇到了类似的问题,最终解决方法是删除所有__pycache__目录和.pyc文件。

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