无法在 heroku django 中导入名称 _uuid_generate_random

Cannot import name _uuid_generate_random in heroku django

我正在进行一个扫描用户 gmail 收件箱并提供报告的项目。我已将其部署在 heroku 中,规格如下:

语言:Python 2.7

框架:Django 1.8

任务调度器:CeleryRabbitmq-bigwig for broker url)

现在,当 heroku 执行它时,celery 没有给我输出。在 Heroku 上推送显示 Collectstatic 配置错误。我试过使用 whitenoise 包

还尝试执行:heroku 运行 python manage.py collectstatic --dry-运行 --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 提交回滚到之前的工作提交并克隆该代码,但在下一次提交(更改:从媒体文件夹中删除媒体图像)时再次显示相同的错误。

提前致谢

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

此问题已在 Kombu 3.0.30 中修复。

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

然后,升级必要的软件包就足够了,然后用可用的 Kombu 版本重新冻结完整的依赖项列表。

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

并进行测试以确保升级不会破坏其他东西 ;)

虽然升级 kombu 是理想的选择,但如果您受困于不允许这样做的旧依赖项,请将其放在我的 settings.py 的顶部对我有用:

import uuid
uuid._uuid_generate_random = None

这是有效的,因为 _uuid_generate_random 已被删除 here, and this simply restores the default value. This hack seems reasonable as Kombu only checks this to work around a bug resolved in 2007,如果您因为最近的 Python 更新而需要此修复,您本身不会受到影响:)