gpt4 book ai didi

python - 无法使用 nosegae 导入 django 包

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:46 24 4
gpt4 key购买 nike

我正在尝试开始使用 nosegae,但是我遇到了一个问题,即在使用 django 时,即使是最简单的情况,我似乎也无法让它通过。

在没有 --without-sandbox 标志的情况下运行时,以下两个测试均失败

def test_import_django  ():
import django

def test_import_django_http ():
import django.http

Traceback (most recent call last):
File "C:\Python27\lib\site-packages\nose-1.1.2-py2.7.egg\nose\case.py", line 1
97, in runTest
self.test(*self.arg)
File "C:\Users\User\Desktop\TDD_GAE\myproj\tests.py", line 2, in test_import_d
jango
import django
File "C:\Python27\lib\site-packages\nosegae-0.1.9-py2.7.egg\nosegae.py", line
207, in find_module
return super(HookMixin, self).find_module(fullname, path)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\de
v_appserver.py", line 1505, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\de
v_appserver.py", line 1998, in find_module
search_path)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\de
v_appserver.py", line 1505, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\de
v_appserver.py", line 2119, in FindModuleRestricted
result = self.FindPathHook(submodule, submodule_fullname, path_entry)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\de
v_appserver.py", line 2219, in FindPathHook
return self._imp.find_module(submodule, [path_entry])

但是,如果我确实使用 --without-sandbox 至少第一个测试通过了

myproj.tests.test_import_django ... ok
myproj.tests.test_import_django_http ... ERROR

======================================================================
ERROR: myproj.tests.test_import_django_http
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\nose-1.1.2-py2.7.egg\nose\case.py", line 1
97, in runTest
self.test(*self.arg)
File "C:\Users\User\Desktop\TDD_GAE\myproj\tests.py", line 5, in test_import_d
jango_http
import django.http
File "C:\Program Files (x86)\Google\google_appengine\lib\django_1_2\django\htt
p\__init__.py", line 9, in <module>
from mod_python.util import parse_qsl
File "C:\Python27\lib\site-packages\nosegae-0.1.9-py2.7.egg\nosegae.py", line
199, in find_module
mod_path = self.find_mod_path(fullname)
File "C:\Python27\lib\site-packages\nosegae-0.1.9-py2.7.egg\nosegae.py", line
251, in find_mod_path
_sf, path, _desc= self._imp.find_module(top, None)
AttributeError: 'str' object has no attribute 'find_module'

有没有人遇到并知道我该如何解决这个问题?

编辑

看来是递归导入的问题

def test_import_pdb ():
import pdb
pdb.set_trace ()

部分堆栈跟踪是

File "C:\Python27\lib\pdb.py", line 72, in __init__
import readline

请注意 django.http__init__ 中的 import 也是堆栈跟踪的一部分

最佳答案

阅读https://docs.djangoproject.com/en/dev/topics/testing/关于 Django 测试。

据我所知,最好使用 django 附带的 unittest 或 doctest,因为它对特定于 django 的测试有多项改进,例如表单字段输出测试和一些数据库功能。然而这不是必需的,如果你想继续使用 nose - 认为你错过了 django 环境设置:

from django.test.utils import setup_test_environment
setup_test_environment()

此行需要在 ./manage.py --test 之外运行测试

UPD是的,我之前的想法是错误的。所以我只是深入研究了 nose 和 nose-gae 的来源,以及我的想法 - 检查你的 nose 版本中的 HardenedModulesHook 定义,因为在鼻腔中我发现了以下内容:

class HardenedModulesHook(object):
...
def __init__(self,
module_dict,
imp_module=imp,
os_module=os,
dummy_thread_module=dummy_thread,
pickle_module=pickle):
...

这给出了以下 - 当 noseGAE 插件 begin() 方法被执行时 -> 那里 self._install_hook(dev_appserver.HardenedModulesHook) 被调用,它声明了混合钩子(Hook)类和创建它的实例,如 self.hook = Hook(sys.modules, self._path)。 <- 有 HardenedModulesHook.__init__ 以第二个参数作为神秘的 '_path' 调用,但是在 NOSE 中,这个参数默认应该是 'imp' 模块 -> 这使你有一个异常(exception):

    _sf, path, _desc= self._imp.find_module(top, None)
AttributeError: 'str' object has no attribute 'find_module'

所以我认为这可能是 nose-gae 的问题:(

关于python - 无法使用 nosegae 导入 django 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com