首页 文章

无法在heroku django中导入名称_uuid_generate_random

提问于
浏览
55

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

语言: Python 2.7

框架: Django 1.8

任务调度程序: CeleryRabbitmq-bigwig 代理代理网址)

现在当heroku执行它时,芹菜没有给我输出 . 在Heroku推动它显示 Collectstatic configuration error . 我试过用 whitenoise package

也尝试执行: heroku run 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 回答

  • 113

    您将遇到this issue,这会影响Python 2.7.11(Celery需要Kombu) .

    该问题已在Kombu 3.0.30中修复 .

  • 2

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

    import uuid
    uuid._uuid_generate_random = None
    

    这是因为删除了_uuid_generate_random here,这只是恢复默认值 . 这个hack似乎是合理的,因为Kombu只检查到work around a bug resolved in 2007,如果你因为最近的Python更新需要这个修复,你本身就不会受到影响:)

  • 45

    是的,Alasdair提到的问题是造成错误的原因 . 我通过关注this workflow解决了我的项目中的问题,只保留了我列出Celery的基本要求到freeze.txt,但没有列出像Kombu这样的依赖项 .

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

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

    并测试一些东西,以确保升级没有破坏别的东西;)

相关问题