【问题标题】:Tox and django_toolbar: ImportErrorTox 和 django_toolbar:ImportError
【发布时间】:2015-05-07 12:15:29
【问题描述】:

在尝试使用 Tox 更好地简化跨多个环境的测试时,我在测试 Python 3.4 时遇到了以下错误:

ImportError: No module named 'debug_toolbar'

但是,django-debug-toolbar==1.3.0 列在我的requirements.txt 文件中,而我的tox.ini 文件如下所示:

[tox]
envlist = py27,py34
skipsdist = True

[testenv]
deps = -r{toxinidir}/requirements.txt
setenv =
    PYTHONPATH = {toxinidir}:{toxinidir}
commands = python manage.py test

似乎它没有正确安装需求。奇怪的是,py27 环境没有抛出这个错误,并且能够很好地执行测试。

这可能是什么原因造成的?

编辑:作为参考,这是我当前的设置。当我第一次运行 tox 时(即没有 .tox),它运行良好,但之后的任何时候它都会失败。 .tox 目录似乎建立正确;所有依赖项都安装在.tox/py34/lib/python3.4/site-packages 中。和之前相比,我现在也卸载了django,确实是第一个失败的依赖。

(venv)joost@thorin:myproject/ (master✗) % rm -rf .tox
(venv)joost@thorin:myproject/ (master✗) % cat tox.ini
[tox]
envlist = py27,py34
skipsdist = True

[testenv]
deps = -r{toxinidir}/requirements.txt
commands = python manage.py test


(venv)joost@thorin:myproject/ (master✗) % tox
py27 create: /Users/Joost/myproject/.tox/py27
py27 installdeps: -r/Users/Joost/myproject/requirements.txt
py27 runtests: PYTHONHASHSEED='4248725049'
py27 runtests: commands[0] | python manage.py test
Creating test database for alias 'default'...
................
----------------------------------------------------------------------
Ran 16 tests in 0.093s

OK
Destroying test database for alias 'default'...
py34 create: /Users/Joost/myproject/.tox/py34
py34 installdeps: -r/Users/Joost/myproject/requirements.txt
py34 runtests: PYTHONHASHSEED='4248725049'
py34 runtests: commands[0] | python manage.py test
Creating test database for alias 'default'...
................
----------------------------------------------------------------------
Ran 16 tests in 0.093s

OK
Destroying test database for alias 'default'...
____________________________________________________________________ summary _____________________________________________________________________
  py27: commands succeeded
  py34: commands succeeded
  congratulations :)


(venv)joost@thorin:myproject/ (master✗) % tox
py27 runtests: PYTHONHASHSEED='3259360769'
py27 runtests: commands[0] | python manage.py test
Creating test database for alias 'default'...
................
----------------------------------------------------------------------
Ran 16 tests in 0.088s

OK
Destroying test database for alias 'default'...
py34 runtests: PYTHONHASHSEED='3259360769'
py34 runtests: commands[0] | python manage.py test
Traceback (most recent call last):
  File "manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named 'django'
ERROR: InvocationError: '/Users/Joost/myproject/.tox/py34/bin/python manage.py test'
____________________________________________________________________ summary _____________________________________________________________________
  py27: commands succeeded
ERROR:   py34: commands failed
(venv)joost@thorin:myproject/ (master✗) % 

【问题讨论】:

    标签: python django tox


    【解决方案1】:

    最后,通过升级tox 解决了这个问题。我还不确定这个问题何时被准确修复,或者它被列为什么错误,但使用版本 2.1.1 我不再收到此错误。

    【讨论】:

      【解决方案2】:
      File "/usr/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
      

      在我看来,您的 Django 没有安装在 virtualenv 中。如果是,它将指向/Users/$USER/path/to/virtualenv/lib/python3.4/site-packages/django/etc/etc/etc。您是否以某种方式将 tox 设置为使用本地安装的 Django,而不是安装在 virtualenv 中的 Django?

      【讨论】:

      • 是的,这也让我想知道.. 除了tox.ini 中列出的以外,我没有以任何方式配置 tox,并且不明白为什么它不会保留在应该的虚拟环境中使用requirements.txt.. 创建。奇怪的是它确实适用于 Python 2.7。我现在在本地卸载了Django,然后我得到的错误是ImportError: No module named 'django'
      • 尝试从您的 tox.ini 中删除 skipsdist = True。如果 Django 是sdist,也许这会阻止安装 Django?另外,尝试运行一次 tox,然后查看 Python 3 virtualenv 的 .tox 文件夹,看看它是否安装了任何包。
      • 顺便说一句,您的setenv = PYTHONPATH = {toxinidir}:{toxinidir} 指的是{toxinidir} TWICE。冒号是分隔符。理想情况下,您只想指向{toxinidir},或者指向该目录以及{toxinidir}/your-module-name
      • 我从here 获得了这些配置。你对setenv 提出了一个有效的观点。没有skipsdist,它会卡在寻找setup.py。 --但是,我试图完全删除.tox 并重新开始,现在它突然起作用了。我不确定那里发生了什么......也许早期的尝试正在干扰。谢谢! - 编辑:误报。当我再次拨打tox 时,我遇到了同样的情况。它确实成功地运行了一次
      • 我做了一些测试,发现每次更改 requirements.txt 时都应该删除 .tox 目录。在我的小测试中,它只会在第一次运行时从 requirements.txt 安装包。要验证,请确保您的包确实在 .tox/py34/lib/python3.4/site-packages 中。
      【解决方案3】:

      我现在也卸载了 django,这确实是第一个失败的依赖项。

      tox 似乎只创建了一次 virtualenv。如果它这样做了,那么你之后例如修改了requirements.txt文件,或者卸载了django之类的库,你需要re-create it

      强制 tox 重新创建(特定)虚拟环境:

      tox --recreate -e py34  # [edited to py34]
      

      将触发完全重新安装 现有的 py27 环境(如果不存在则重新创建)。

      https://stackoverflow.com/a/50199089/1587329 的副本,已编辑以适应

      【讨论】:

        猜你喜欢
        • 2017-07-11
        • 1970-01-01
        • 2023-01-18
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 2020-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多