Вот временный взлом.Я думаю, это связано с тем, что nose-gae
готовит среду Google App Engine.Я углубился в код и подключил try
except
pass
фрагменты здесь и там.
Exception AttributeError: "'NoneType' object has no attribute 'mkstemp'" in <bound method DatastoreFileStub.__del__ of <google.appengine.api.datastore_file_stub.DatastoreFileStub object at 0x101a86750>> ignored
Exception ImportError: 'No module named threading' in <bound method local.__del__ of <_threading_local.local object at 0x103bb4520>> ignored
Оказывается, единственное, что имело значение, было второе исключение.Я преследовал его до /usr/local/google_appengine/google/appengine/dist/_threading_local.py
.В функции __del__
класса local
вокруг строки 237 есть строка import threading
.Это не выдает никакой ошибки при запуске сервера разработки.
Но при запуске nosetests --with-gae
кажется, что SDK не может получить доступ к стандартным библиотекам Python для динамической загрузки.В экспериментах, приводящих к этой ситуации, я не смог import inspect
, чтобы я мог видеть, кто что звонит.Я прибег к ручному расследованию.
Взлом
В /usr/local/google_appengine/dev_appserver.py
, найдите переменную EXTRA_PATHS
.Добавьте к пути к стандартной библиотеке Python примерно так:
EXTRA_PATHS = [
DIR_PATH,
os.path.join(DIR_PATH, 'lib', 'antlr3'),
os.path.join(DIR_PATH, 'lib', 'django_0_96'),
os.path.join(DIR_PATH, 'lib', 'fancy_urllib'),
os.path.join(DIR_PATH, 'lib', 'ipaddr'),
os.path.join(DIR_PATH, 'lib', 'jinja2'),
os.path.join(DIR_PATH, 'lib', 'protorpc'),
os.path.join(DIR_PATH, 'lib', 'markupsafe'),
os.path.join(DIR_PATH, 'lib', 'webob'),
os.path.join(DIR_PATH, 'lib', 'webapp2'),
os.path.join(DIR_PATH, 'lib', 'yaml', 'lib'),
os.path.join(DIR_PATH, 'lib', 'simplejson'),
os.path.join(DIR_PATH, 'lib', 'google.appengine._internal.graphy'),
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
]
И странные ошибки исчезнут.На данный момент:)