如何解决无法导入名称页面(django/wagtail)

How to resolve cannot import name pages (django/wagtail)

最近我一直在尝试让 wagtail 与我现有的 Django 应用程序一起工作。我遇到错误:-

ImportError: No module named wagtail
unable to load app 0 (mountpoint='') (callable not found or import error)

经过多次故障排除后,我设法解决了这个问题,方法是从以下位置复制 wagtail 文件夹:

/usr/local/lib/python2.7/dist-packages/

进入这里

/opt/django/src/

解决了这个错误后,我收到了另一个关于不同模块的错误,还有另一个...每次我将文件夹从 /usr/local/lib/python2.7/dist-packages/ 复制到 /opt/django/src/ 时,它最终解决了我遇到的问题uWSGI 开始了。

现在当我访问我的应用程序主页时,我收到此错误

ImportError at /

cannot import name pages

    Request Method:     GET
Request URL:    http://example.com
Django Version:     1.9
Exception Type:     ImportError
Exception Value:    

cannot import name pages

Exception Location:     ./wagtail/wagtailadmin/urls/__init__.py in <module>, line 4
Python Executable:  /usr/local/bin/uwsgi
Python Version:     2.7.3
Python Path:    

['.',
 '',
 '/opt/django/src',
 '/root/.python',
 '/opt/django/env/lib/python2.7',
 '/opt/django/env/lib/python2.7/plat-linux2',
 '/opt/django/env/lib/python2.7/lib-tk',
 '/opt/django/env/lib/python2.7/lib-old',
 '/opt/django/env/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/opt/django/env/local/lib/python2.7/site-packages',
 '/opt/django/env/lib/python2.7/site-packages']

我检查了引用的文件 (./wagtail/wagtailadmin/urls/__init__.py),它看起来像这样:

from django.conf.urls import url, include
from django.views.decorators.cache import cache_control

from wagtail.wagtailadmin.urls import pages as wagtailadmin_pages_urls
from wagtail.wagtailadmin.urls import collections as wagtailadmin_collections_urls
from wagtail.wagtailadmin.urls import password_reset as wagtailadmin_password_reset_urls
from wagtail.wagtailadmin.views import account, chooser, home, pages, tags, userbar
from wagtail.wagtailadmin.api import urls as api_urls
from wagtail.wagtailcore import hooks
from wagtail.utils.urlpatterns import decorate_urlpatterns
from wagtail.wagtailadmin.decorators import require_admin_access

违规行是第一个鹡鸰'from' ...

from wagtail.wagtailadmin.urls import pages as wagtailadmin_pages_urls

我该如何解决这个错误?

我已经 运行 对 wagtail 设置进行了一些测试。我在 Ubuntu 14 安装中进行了每个测试(每个测试都在 Cloud9 IDE 上的新工作区中进行)。

测试 1:直线 python 2.7

sudo pip install wagtail
ERRO: error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

评论:输出了很多 x86_64-linux-gnu-gcc: error: build/temp.linux-x86_64-2.7/libImaging/codec_fd.o: No such file or directory 个错误。 没用。

测试 2 - Python 2.7 with virtualenv

sudo pip install virtualenv
virtualenv env 
source env/bin/activate

现在从他们 github https://github.com/wagtail/wagtail

pip install wagtail 
out: Successfully installed Django-1.10.7 Pillow-4.1.1 Unidecode-0.4.20 Willow-0.4 beautifulsoup4-4.5.3 django-modelcluster-3.1 django-taggit-0.22.1 django-treebeard-4.1.0 djangorestframework-3.6.2 html5lib-0.999999999 olefile-0.44 pytz-2017.2 requests-2.13.0 wagtail-1.9.1 webencodings-0.5.1
wagtail start mysite
cd mysite
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

我不得不编辑 settings/dev.py 并包含 ALLOWED_HOSTS = ['*'] 因为我在云 9 上。还需要 运行 服务器之后的 $IP:$P​​ORT。成功了!

Test3 - Python 3.4 with virtualenv

sudo pip3 install virtualenv
virtualenv -p python3 env
source env/bin/activate
pip install wagtail
Successfully installed Django-1.10.7 Pillow-4.1.1 Unidecode-0.4.20 Willow-0.4 beautifulsoup4-4.5.3 django-modelcluster-3.1 django-taggit-0.22.1 django-treebeard-4.1.0 djangorestframework-3.6.2 html5lib-0.999999999 olefile-0.44 pytz-2017.2 requests-2.13.0 wagtail-1.9.1 webencodings-0.5.1

其余命令相同。成功了!

测试 4 - Python 3.4 没有 virtualenv

sudo pip3 install wagtail
out: Successfully installed wagtail django-taggit requests Unidecode Django djangorestframework Pillow beautifulsoup4 Willow django-modelcluster django-treebeard olefile pytz
wagtail start mysite
python3 manage.py migrate
python3 manage.py createsuperuser
python3 manage.py runserver

编辑:犯了一个错误。在这种情况下,应该 运行 和 python3,而不是 python。又做了一次,成功了!

结论:看起来你需要一个 virtualenv 才能在 Ubuntu 14 和 python2 上工作。使用 python3 它可以使用和不使用 virtualenv。我无法重现你的错误,但想法是一样的:它不起作用,因为它在错误的地方寻找东西。

评论:你提到的有两件事我无法测试:

I have been trying to get wagtail to work with my existing Django application

由于存在大量依赖项(Pillow、Django rest、beatifullsoup 和其他我从未听说过的),如果它在之前的设置中开箱即用,那将是 st运行ge .我的意思是,Django 是 wagtail 的依赖项。所以我会尝试相反的方法。使用 wagtail 重新开始并将您的代码移植到那里(为了社区的缘故,使用 python3 ;))。此外,这种文件的手动副本就像程序员最糟糕的噩梦(至少对我而言)。这看起来像是版本问题。尝试 post 所有涉及的版本,以及重现问题的确切步骤。我的意思是,您是否在 django 运行ning 的操作系统中 pip install wagtail?

I was having and uWSGI started.

所以您已经部署了您的应用程序?这使事情复杂化。如果版本和 virtualenv 不能解决你的问题,社区需要部署的设置细节。你也没有提到你的操作系统。

希望对您有所帮助!祝你好运!

我运行进

cannot import name pages

错误发生在:

from wagtail.wagtailadmin.urls import pages as wagtailadmin_pages_urls

在尝试将 wagtail 应用程序部署到 Google App Engine 时,无法在我的本地开发服务器上重现该问题。

我只是间歇性地在 GAE 中看到的一个看似无关的错误涉及 PIL 库中的导入错误。我能够通过从我的 /lib 目录中的 vendored 包中删除 PIL 和 pillow 相关文件夹来解决这两个错误。由于平台特定的二进制文件,我不得不通过 app.yaml 文件导入 PIL,但是 运行 pip install -t lib/ -r requirements-vendor.txt 导致 PIL 安装到 lib文件夹(作为 Wagtail 的依赖项)