以windows为主机,在vagrant ubuntu vm上运行pytest。导入文件不匹配

时间:2017-03-30 17:25:38

标签: django ubuntu vagrant pytest pytest-django

我想这是一个非常具体的情况,但我会提出问题,因为我没有找到相关答案,可能对其他人有用。

情况如下:

  • Windows是主机操作系统。
  • 有一个Ubuntu VirtualBox(用vagrant创建)。

  • 我的django项目文件夹在windows和ubuntu之间共享。

  • 我在ubuntu和on上安装了pytest(通过pytest-django) 我在windows上的virtualenv。

  • 如果我从windows virtualenv运行pytest命令,则运行测试 好的
  • 但是在ubuntu vm终端中我不能只运行pytest命令 因为我得到错误:程序'pytest'目前不是 安装。
  • 我可以使用python -m pytest运行它。但在这种情况下,我得到import file mismatch错误:

========================错误====================== =

_____________ ERROR collecting my_django_app/tests.py ____________

import file mismatch:
imported module 'my_django_app.tests' has this **__file__** attribute:
  C:\virtualEnvs\my_env\project_src\my_django_app\tests.py
which is not the same as the test file we want to collect:
  /vagrant/projects/project_src/my_django_app/tests.py
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules

信息很清楚,但我不知道如何克服这个问题。

我使用python 2.7.9并且没有 pycache 文件夹(也没有ant .pyc编译文件)。

1 个答案:

答案 0 :(得分:0)

我只需删除缓存的已编译python文件。这些文件位于django项目文件夹中的 __pycache __ 文件夹中。每个django应用程序也有一个 pycache 文件夹。

如果在Windows主机中运行pytest,则缓存的编译文件包含特定于Windows的路径,并尝试从那里导入模块。因此必须删除缓存的文件。然后,您可以使用以下命令在ubuntu VM中运行pytest:python -m pytest

通过使用-B选项运行python解释器,可以首先避免创建编译文件:python -B pytest