Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在谷歌应用程序引擎上使用Django的困难_Python_Django_Google App Engine - Fatal编程技术网

Python 在谷歌应用程序引擎上使用Django的困难

Python 在谷歌应用程序引擎上使用Django的困难,python,django,google-app-engine,Python,Django,Google App Engine,我有一个Django 1.1.1项目,它运行良好。我正在尝试将其导入谷歌应用程序引擎 我试着跟着这些 我在dev服务器上运行它,得到一个导入错误: ImportError at / No module named mysite.urls 这是mysite/的文件夹结构: app.yaml <DIR> myapp index.yaml main.py manage.py <DIR> media settings.py urls.py _

我有一个Django 1.1.1项目,它运行良好。我正在尝试将其导入谷歌应用程序引擎

我试着跟着这些

我在dev服务器上运行它,得到一个导入错误:

ImportError at /
No module named mysite.urls
这是mysite/的文件夹结构:

app.yaml
<DIR>          myapp
index.yaml
main.py
manage.py
<DIR>          media
settings.py
urls.py
__init__.py
ROOT_URLCONF = 'mysite.urls'
import logging, os

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Force Django to reload its settings.
from django.conf import settings
settings._target = None

# Must set this env var before importing any part of Django
# 'project' is the name of the project created with django-admin.py
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import logging
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher

def log_exception(*args, **kwds):
    logging.exception('Exception in request:')

# Log errors.
django.dispatch.dispatcher.connect(
    log_exception, django.core.signals.got_request_exception)

# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
    django.db._rollback_on_exception,
    django.core.signals.got_request_exception)

def main():
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()
<DIR> mysite
app.yaml
index.yaml
main.py
<DIR> myapp
<DIR> media
__init__.py
initial_data.json
manage.py
settings.py
urls.py
设置.py

app.yaml
<DIR>          myapp
index.yaml
main.py
manage.py
<DIR>          media
settings.py
urls.py
__init__.py
ROOT_URLCONF = 'mysite.urls'
import logging, os

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Force Django to reload its settings.
from django.conf import settings
settings._target = None

# Must set this env var before importing any part of Django
# 'project' is the name of the project created with django-admin.py
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import logging
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher

def log_exception(*args, **kwds):
    logging.exception('Exception in request:')

# Log errors.
django.dispatch.dispatcher.connect(
    log_exception, django.core.signals.got_request_exception)

# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
    django.db._rollback_on_exception,
    django.core.signals.got_request_exception)

def main():
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()
<DIR> mysite
app.yaml
index.yaml
main.py
<DIR> myapp
<DIR> media
__init__.py
initial_data.json
manage.py
settings.py
urls.py
我做错了什么

更新

现在我得到了这个错误:

Request Method:     GET
Request URL:    http://localhost:8082/
Exception Type:     AttributeError
Exception Value:    'module' object has no attribute 'autodiscover'
Exception Location:     C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in LoadModuleRestricted, line 1782
main.py

app.yaml
<DIR>          myapp
index.yaml
main.py
manage.py
<DIR>          media
settings.py
urls.py
__init__.py
ROOT_URLCONF = 'mysite.urls'
import logging, os

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Force Django to reload its settings.
from django.conf import settings
settings._target = None

# Must set this env var before importing any part of Django
# 'project' is the name of the project created with django-admin.py
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import logging
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher

def log_exception(*args, **kwds):
    logging.exception('Exception in request:')

# Log errors.
django.dispatch.dispatcher.connect(
    log_exception, django.core.signals.got_request_exception)

# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
    django.db._rollback_on_exception,
    django.core.signals.got_request_exception)

def main():
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()
<DIR> mysite
app.yaml
index.yaml
main.py
<DIR> myapp
<DIR> media
__init__.py
initial_data.json
manage.py
settings.py
urls.py
engineapp/的目录结构:

app.yaml
<DIR>          myapp
index.yaml
main.py
manage.py
<DIR>          media
settings.py
urls.py
__init__.py
ROOT_URLCONF = 'mysite.urls'
import logging, os

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Force Django to reload its settings.
from django.conf import settings
settings._target = None

# Must set this env var before importing any part of Django
# 'project' is the name of the project created with django-admin.py
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import logging
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher

def log_exception(*args, **kwds):
    logging.exception('Exception in request:')

# Log errors.
django.dispatch.dispatcher.connect(
    log_exception, django.core.signals.got_request_exception)

# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
    django.db._rollback_on_exception,
    django.core.signals.got_request_exception)

def main():
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()
<DIR> mysite
app.yaml
index.yaml
main.py
<DIR> myapp
<DIR> media
__init__.py
initial_data.json
manage.py
settings.py
urls.py
mysite
app.yaml
指数yaml
main.py
engineapp/mysite的目录结构

app.yaml
<DIR>          myapp
index.yaml
main.py
manage.py
<DIR>          media
settings.py
urls.py
__init__.py
ROOT_URLCONF = 'mysite.urls'
import logging, os

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Force Django to reload its settings.
from django.conf import settings
settings._target = None

# Must set this env var before importing any part of Django
# 'project' is the name of the project created with django-admin.py
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import logging
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher

def log_exception(*args, **kwds):
    logging.exception('Exception in request:')

# Log errors.
django.dispatch.dispatcher.connect(
    log_exception, django.core.signals.got_request_exception)

# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
    django.db._rollback_on_exception,
    django.core.signals.got_request_exception)

def main():
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()
<DIR> mysite
app.yaml
index.yaml
main.py
<DIR> myapp
<DIR> media
__init__.py
initial_data.json
manage.py
settings.py
urls.py
myapp
媒体
__初始值
初始_data.json
manage.py
设置.py
url.py

我觉得我离这里越来越近了,但仍然不在那里。

我还没有将纯django与appengine一起使用。但据我所知,你需要Djangappengine补丁来让它工作。您可以阅读并从下载。

我没有将纯django与appengine一起使用。但据我所知,你需要Djangappengine补丁来让它工作。您可以阅读并从下载。

尝试将
ROOT\u URLCONF
更改为
'url'
。我认为在appengine上运行时,应用程序的父目录(在appengine意义上,而不是Django意义上)不在
sys.path
上,这意味着它不会将
mysite
视为Python包/模块

编辑以跟上编辑的问题:

application: mysite
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
  script: main.py
现在听起来您无意中使用了Django 0.96,但希望使用Django 1.1+。当您在App Engine上导入django时,除非您明确告诉App Engine您要使用不同的版本,否则最终将得到0.96

差不多

from google.appengine.dist import use_library
use_library('django', '1.1')
我们应该做这个把戏。请注意,为了在开发服务器上使用它,您必须安装自己的Django 1.1副本,因为它没有与SDK捆绑在一起


还请注意,据我所知,您使用AppEngine上的Django admin站点不会有任何运气。

尝试将
ROOT\u URLCONF
更改为
'url'
。我认为在appengine上运行时,应用程序的父目录(在appengine意义上,而不是Django意义上)不在
sys.path
上,这意味着它不会将
mysite
视为Python包/模块

编辑以跟上编辑的问题:

application: mysite
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
  script: main.py
现在听起来您无意中使用了Django 0.96,但希望使用Django 1.1+。当您在App Engine上导入django时,除非您明确告诉App Engine您要使用不同的版本,否则最终将得到0.96

差不多

from google.appengine.dist import use_library
use_library('django', '1.1')
我们应该做这个把戏。请注意,为了在开发服务器上使用它,您必须安装自己的Django 1.1副本,因为它没有与SDK捆绑在一起

还请注意,据我所知,使用App Engine上的Django管理站点不会有任何运气。

以下是我的main.py:

import os
import sys
import logging

# Google App Hosting imports.
from google.appengine.ext.webapp import util
from google.appengine.dist import use_library

os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
sys.path.append("/home/brox/tmp/mysite")

use_library('django', '1.1')

# Enable info logging by the app (this is separate from appserver's
# logging).
logging.getLogger().setLevel(logging.DEBUG)

def log_exception(*args, **kwds):
  logging.exception('Exception in request:')

# Force sys.path to have our own directory first, so we can import from it.
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

# Force Django to reload its settings.
from django.conf import settings
settings._target = None

import django.core.handlers.wsgi
import django.core.signals
import django.db

# Log errors.
django.dispatch.Signal.connect(
   django.core.signals.got_request_exception, log_exception)

# Unregister the rollback event handler.
django.dispatch.Signal.disconnect(
django.core.signals.got_request_exception,
django.db._rollback_on_exception)

def main():    
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

if __name__ == "__main__":
    main()
正如您所看到的,还有其他路径,django错误日志记录有点不同

希望能对您有所帮助。

这是我的main.py:

import os
import sys
import logging

# Google App Hosting imports.
from google.appengine.ext.webapp import util
from google.appengine.dist import use_library

os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
sys.path.append("/home/brox/tmp/mysite")

use_library('django', '1.1')

# Enable info logging by the app (this is separate from appserver's
# logging).
logging.getLogger().setLevel(logging.DEBUG)

def log_exception(*args, **kwds):
  logging.exception('Exception in request:')

# Force sys.path to have our own directory first, so we can import from it.
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

# Force Django to reload its settings.
from django.conf import settings
settings._target = None

import django.core.handlers.wsgi
import django.core.signals
import django.db

# Log errors.
django.dispatch.Signal.connect(
   django.core.signals.got_request_exception, log_exception)

# Unregister the rollback event handler.
django.dispatch.Signal.disconnect(
django.core.signals.got_request_exception,
django.db._rollback_on_exception)

def main():    
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

if __name__ == "__main__":
    main()
正如您所看到的,还有其他路径,django错误日志记录有点不同


希望能对您有所帮助。

这样做很有效,但我还有更多问题。(OP更新。)现在查看我编辑的答案。虽然你可能应该结束这个问题,打开一个新的问题,因为你现在有一个不同的问题。这有点奏效,但我仍然有更多的问题。(OP更新。)现在查看我编辑的答案。虽然你可能应该关闭这个问题,打开一个新的,因为你现在有一个不同的问题。