【问题标题】:Run pytest on vagrant ubuntu vm with windows as host. Import file mismatch在以 windows 为主机的 vagrant ubuntu vm 上运行 pytest。导入文件不匹配
【发布时间】:2017-03-30 17:25:38
【问题描述】:

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

情况是这样的:

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

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

  • 我在 ubuntu 和 ubuntu 上都安装了 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 编译文件)。

【问题讨论】:

标签: django ubuntu vagrant pytest pytest-django


【解决方案1】:

我只需要删除缓存的编译 python 文件。这些文件位于 django 项目文件夹内的 __pycache__ 文件夹中。每个 django 应用也有一个 pycache 文件夹。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多