2015-01-30 4 views
0

ReviewBoard (https://www.reviewboard.org/)를 설치하려고하는데 실행 중에 " (키워드가 문자열이어야합니다.)"문제가 있습니다. 그것.Python2.7에서 여전히 "__init __() 키워드는 문자열이어야합니다"- ReviewBoard

나는 파이썬 2.6에서 공통적 인 문제라고 읽었다. 나는 그것을 확인했고 python2.6을 가지고 있었기 때문에 python2.7을 설치했지만 문제는 여전히 존재합니다.

[Fri Jan 30 16:02:11 2015] [error] mod_wsgi (pid=12875): Exception occurred processing WSGI script '/srv/www/htdocs/tools/reviewboard/htdocs/reviewboard.py'. 
[Fri Jan 30 16:02:11 2015] [error] Traceback (most recent call last): 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/core/handlers/wsgi.py", line 187, in __call__ 
[Fri Jan 30 16:02:11 2015] [error]  self.load_middleware() 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/core/handlers/base.py", line 45, in load_middleware 
[Fri Jan 30 16:02:11 2015] [error]  mw_class = import_by_path(middleware_path) 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/utils/module_loading.py", line 21, in import_by_path 
[Fri Jan 30 16:02:11 2015] [error]  module = import_module(module_path) 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/utils/importlib.py", line 40, in import_module 
[Fri Jan 30 16:02:11 2015] [error]  __import__(name) 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/ReviewBoard-2.0.12-py2.7.egg/reviewboard/admin/middleware.py", line 23, in <module> 
[Fri Jan 30 16:02:11 2015] [error]  from reviewboard.admin.checks import check_updates_required 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/ReviewBoard-2.0.12-py2.7.egg/reviewboard/admin/checks.py", line 41, in <module> 
[Fri Jan 30 16:02:11 2015] [error]  from djblets.siteconfig.models import SiteConfiguration 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/Djblets-0.8.14-py2.7.egg/djblets/siteconfig/models.py", line 28, in <module> 
[Fri Jan 30 16:02:11 2015] [error]  from django.contrib.sites.models import Site 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/contrib/sites/models.py", line 58, in <module> 
[Fri Jan 30 16:02:11 2015] [error]  class Site(models.Model): 
[Fri Jan 30 16:02:11 2015] [error] File "/usr/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/db/models/base.py", line 96, in __new__ 
[Fri Jan 30 16:02:11 2015] [error]  new_class.add_to_class('_meta', Options(meta, **kwargs)) 
[Fri Jan 30 16:02:11 2015] [error] TypeError: Error when calling the metaclass bases 
[Fri Jan 30 16:02:11 2015] [error]  __init__() keywords must be strings 

내가 언급해야 할 것은 python2.6이 여전히 설치되어 있으므로 여기에 문제가 있습니까? 아파치 설정 파일에서 파이썬 2.7을 가리키고 있습니다. 파이썬 2.6을 사용하고있는 라인을 제거하면됩니다.

WSGIDaemonProcess example.com python-path=/srv/www/htdocs/tools/reviewboard/htdocs:/usr/local/lib/python2.7/site-packages 

는 또한 사용하려고 시도했다 :

WSGIPythonHome /usr/local/lib/python2.7 
WSGIPythonPath /usr/local/lib/python2.7 

을하지만 그것은 나 제공합니다

때 도움이되지 않습니다

[Fri Jan 30 17:01:38 2015] [error] mod_wsgi (pid=11500): Target WSGI script '/srv/www/htdocs/tools/reviewboard/htdocs/reviewboard.py' cannot be loaded as Python module. 
[Fri Jan 30 17:01:38 2015] [error] mod_wsgi (pid=11500): Exception occurred processing WSGI script '/srv/www/htdocs/tools/reviewboard/htdocs/reviewboard.py'. 
[Fri Jan 30 17:01:38 2015] [error] Traceback (most recent call last): 
[Fri Jan 30 17:01:38 2015] [error] File "/srv/www/htdocs/tools/reviewboard/htdocs/reviewboard.py", line 3, in <module> 
[Fri Jan 30 17:01:38 2015] [error]  import pkg_resources 
[Fri Jan 30 17:01:38 2015] [error] ImportError: No module named pkg_resources 

Reinstaling 설정 도구 (https://pypi.python.org/pypi/setuptools에게) python2.7 또는 python2.6 양식 콘솔을 실행하고 pkg_resources를 가져 오지만 오류가 없습니다.

여기에 무엇이 잘못 되었습니까?

+1

말하자면'kwargs'의 값은 무엇입니까? 'kwargs'는 임의의 해시 가능 유형 (터플처럼)을 키로 가질 수있는 dict이지만, ** 언팩을 함수 키워드 인수에 사용할 수있는 문자열 키만 허용됩니다. –

답변

2

이 오류는 다음과 같이 생성됩니다 (이 내용은 Python 2.7.9이지만 그다지 중요하지 않습니다).

def function(*args, **kwargs): 
    print u'I got args: %s' % u', '.join(args) 
    print u'I got kwrgs: %s' % u', '.join(u'%s=%s' % (k, v) 
              for k, v in kwargs.items()) 

이 함수는 전달 된 내용을 인쇄합니다. 파이썬에서는 키워드 args를 수동으로 지정하거나 dict을 압축 해제 할 수 있습니다. 딕트를 풀어 봅시다.

kwargs = {'a': 1, 'b': 2} 
function(**kwargs) 
I got args: 
I got kwargs: a=1, b=2 

모든 것이 정성을 다했습니다. 그러나 dicts는 더 유연하며 해시 가능 유형을 문자열이 아닌 키로 허용합니다. 우리가 이렇게하면 어떻게 될까요? 이제

kwargs[(0, 1)] = 'five' # tuples are hashable and can be dict keys 

, 우리는 함수를 호출하는 경우 : 물론 말이 안 function(a=1, b=2, (0, 1)='five')으로 압축하려고하기 때문에

TypeError: function() keywords must be strings 

: 우리는 얻을

function(**kwargs) 

.

희망이 도움이됩니다.

관련 문제