【问题标题】:Django + heroku - import error on line that doesn't existDjango + heroku - 导入错误在线不存在
【发布时间】:2016-04-11 20:10:59
【问题描述】:

我是 django 新手(使用 python 2.7),我只是第一次尝试使用 heroku,但我总是收到以下错误:

remote: -----> Preparing static assets
remote:        Collectstatic configuration error. To debug, run:
remote:        $ heroku run python manage.py collectstatic --noinput

当我运行该命令时,出现有关 django 注册 redux 库的导入错误。我以前在 Django 中遇到过这个问题,我通过将 RequestSite 放在“requests”下并将 Site 放在“models”下来解决这个问题。这解决了问题,但错误仍然出现在 Heroku 中。

(venv) C:\Users\Carolina\Desktop\Coding\venv\project1>heroku run python manage.p
    y collectstatic --noinput
    Running python manage.py collectstatic --noinput on acla-acla... up, run.3645
    Traceback (most recent call last):
      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 350, in execute_from_command_line
        utility.execute()
      File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/_
    _init__.py", line 324, in execute
        django.setup()
      File "/app/.heroku/python/lib/python2.7/site-packages/django/__init__.py", lin
    e 18, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "/app/.heroku/python/lib/python2.7/site-packages/django/apps/registry.py"
    , line 115, in populate
        app_config.ready()
      File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/admin/app
    s.py", line 22, in ready
        self.module.autodiscover()
      File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/admin/__i
    nit__.py", line 26, in autodiscover
        autodiscover_modules('admin', register_to=site)
      File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/module_load
    ing.py", line 50, in autodiscover_modules
        import_module('%s.%s' % (app_config.name, module_to_search))
      File "/app/.heroku/python/lib/python2.7/importlib/__init__.py", line 37, in im
    port_module
        __import__(name)
      File "/app/.heroku/python/lib/python2.7/site-packages/registration/admin.py",
    line 2, in <module>
        from django.contrib.sites.models import RequestSite
    ImportError: cannot import name RequestSite

问题是 - 那条线不存在。我去了 venv/lib/site-packages/registration/admin.py 和第 2 行是这个:

from django.contrib import admin
from django.contrib.sites.requests import RequestSite    # HERE
from django.contrib.sites.models import Site
from django.utils.translation import ugettext_lazy as _

from registration.models import RegistrationProfile
from registration.users import UsernameField


class RegistrationAdmin(admin.ModelAdmin):
    actions = ['activate_users', 'resend_activation_email']
    list_display = ('user', 'activation_key_expired')
    raw_id_fields = ['user']
    search_fields = ('user__{0}'.format(UsernameField()), 'user__first_name', 'user__last_name')

    def activate_users(self, request, queryset):
        """
        Activates the selected users, if they are not already
        activated.

        """
        for profile in queryset:
            RegistrationProfile.objects.activate_user(profile.activation_key)
    activate_users.short_description = _("Activate users")

    def resend_activation_email(self, request, queryset):
        """
        Re-sends activation emails for the selected users.

        Note that this will *only* send activation emails for users
        who are eligible to activate; emails will not be sent to users
        whose activation keys have expired or who have already
        activated.

        """
        if Site._meta.installed:
            site = Site.objects.get_current()
        else:
            site = RequestSite(request)

        for profile in queryset:
            if not profile.activation_key_expired():
                profile.send_activation_email(site)
    resend_activation_email.short_description = _("Re-send activation emails")


admin.site.register(RegistrationProfile, RegistrationAdmin)

这是我用 pip freeze 得到的,以防万一:

Django==1.9
django-crispy-forms==1.5.2
django-registration==2.0.3
django-registration-redux==1.2
django-tinymce==2.2.0
Pillow==3.0.0
requests==2.9.0
South==1.0.2
stripe==1.27.1
wheel==0.24.0

有人知道为什么会这样吗?提前致谢!

编辑----

好的,所以问题出在 Daniel Roseman 提到的那个问题上。该库在 pypi 中已损坏,我不得不告诉 heroku 从 github 安装它(包已修复)。 所以,我去了我的 requirements.txt 文件并替换了这一行:

django-registration-redux==1.2

用这个:

-e git://github.com/macropin/django-registration.git#egg=django-registration==1.2 

(我还删除了 'django-registration==2.0.3',因为它是 django-registration-redux 的旧版本并且正在产生问题)。 希望这可以帮助遇到同样问题的人!

【问题讨论】:

  • 在本地运行 collectstatic 会发生什么?
  • 使用 debug=False,静态文件不会加载(但这似乎发生在很多和我看相同教程的人身上——我必须运行 python manage.py runserver—— - 他们工作不安全)。使用 debug=True,一切正常。

标签: django heroku import django-registration


【解决方案1】:

听起来您为本地安装的 django-registration-redux 副本编辑了代码。但这对 Heroku 没有任何影响,因为该库将根据您的 requirements.txt 中的版本直接从 PyPI 安装。

如果库真的坏了,你需要分叉它并将你的 requirements.txt 指向你的固定版本。但是,查看 GitHub 上的代码,它实际上似乎并没有被破坏;你只需要更新你指向的版本。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-03-23
  • 2018-06-16
  • 1970-01-01
  • 2015-08-29
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
相关资源
最近更新 更多