1

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

ImportError: No module named 'debug_toolbar'

但是,在我的文件django-debug-toolbar==1.3.0中列出,我的文件如下所示:requirements.txttox.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✗) % 
4

3 回答 3

2

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

于 2015-07-04T12:04:25.880 回答
0
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?

于 2015-05-07T12:53:07.433 回答
0

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

似乎tox只创建一次 virtualenv。如果它这样做了,并且您之后更改了requirements.txt文件,或者卸载了类似的库django,您需要重新创建它

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

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

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

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

于 2018-05-06T11:22:31.640 回答