无法在heroku django中导入名称_uuid_generate_random

时间:2015-12-10 09:50:31

标签: python django heroku celery

我正在开发一个扫描用户gmail收件箱并提供报告的项目。我已经在 heroku 中部署了以下规范:

语言: Python 2.7

框架: Django 1.8

任务计划程序:芹菜 Rabbitmq-bigwig 代理网址)

现在当heroku执行它时,芹菜没有给我输出。在Heroku推动其显示 Collectstatic配置错误。我尝试过使用 whitenoise包

还尝试执行: heroku运行python manage.py collectstatic --dry-run --noinput 仍然得到同样的错误。

$ heroku运行python manage.py collectstatic --noinput 给出了以下内容 错误的细节。

File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 303, in execute
settings.INSTALLED_APPS
File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/app/.heroku/python/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/app/salesblocker/__init__.py", line 5, in <module>
from .celery import app as celery_app 
File "/app/salesblocker/celery.py", line 5, in <module>
from celery import Celery
File "/app/.heroku/python/lib/python2.7/site-packages/celery/__init__.py", line 131, in <module>
from celery import five  # noqa
File "/app/.heroku/python/lib/python2.7/site-packages/celery/five.py", line 153, in <module>
from kombu.utils.compat import OrderedDict  # noqa
File "/app/.heroku/python/lib/python2.7/site-packages/kombu/utils/__init__.py", line 19, in <module>
from uuid import UUID, uuid4 as _uuid4, _uuid_generate_random
ImportError: cannot import name _uuid_generate_random

我还尝试将heroku提交回滚到之前的工作提交并克隆该代码,但是在下次提交时(更改:从媒体文件夹中删除了媒体图像),它再次显示相同的错误。

提前致谢

3 个答案:

答案 0 :(得分:113)

你遇到了this issue,这影响了Python 2.7.11(Celery需要Kombu)。

此问题已在Kombu 3.0.30中修复。

答案 1 :(得分:45)

虽然升级kombu是理想的选择,但如果你遇到了不允许这样做的旧版依赖项,那么将它置于我的settings.py顶部对我有用:

import uuid
uuid._uuid_generate_random = None

这是有效的,因为_uuid_generate_random已被删除here,这只是恢复了默认值。这个黑客似乎是合理的,因为Kombu只会将此检查到work around a bug resolved in 2007,如果由于最近的Python更新而需要此修复,那么您本身并未受到影响:)

答案 2 :(得分:2)

是的,Alasdair提到的问题是导致错误的原因。我通过跟随this workflow来解决了我的项目中的问题,只保留了我列出Celery的基本 requirements-to-freeze.txt ,但没有列出像Kombu这样的依赖项。

然后,它足以升级基本软件包,然后使用工作版Kombu版本重新冻结完整的依赖项列表。

pip install --upgrade -r requirements-to-freeze.txt
pip freeze > requirements.txt

并测试以确保升级不会破坏别的东西;)