2011-11-10 5 views
1

나는 macports에서 python 3.1.4를 실행 중이고 여기서 shelve 모듈을 사용하려고합니다. 나는 다른 dev에 그것을 성공적으로 사용할 수있다. 기계 (다른 운영 체제 등) 그래서 내가 무엇을 잘못하고 있을지 모르겠다 ...10.5.8의 Macports에서 설치된 Python 3.1 - 쉘브 오류 (버그 여부)

어떤 생각이나 제안을 주시면 감사하겠습니다! 여기

이 오류입니다 : (나는 오류 메시지를 검색하지만 정보를 찾을 수 없습니다 "dbm.error DB 유형을 판별 할 수 없습니다"- 나는 심지어는 도움이 될 수 있는지 확인하기 위해 protocl = 2를 강제로하려했지만

Python 3.1.4 (default, Oct 7 2011, 15:58:53) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin 
>>> import shelve 
>>> a = [1, 2, 3] 
>>> locker = shelve.open('myshelf',protocol=2) 
>>> locker['a'] = a 
>>> locker.close() 
>>> exit() 


Python 3.1.4 (default, Oct 7 2011, 15:58:53) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin 
>>> import shelve 
>>> locker = shelve.open('myshelf',protocol=2) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shelve.py", line 231, in open 
    return DbfilenameShelf(filename, flag, protocol, writeback) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shelve.py", line 215, in __init__ 
    Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/dbm/__init__.py", line 84, in open 
    raise error[0]("db type could not be determined") 
dbm.error: db type could not be determined 

답변

1

이것은 MacPorts 포트 또는 Python 3의 버그처럼 보입니다. 저의 경우 샘플은 현재 MacPorts Python 2.7.2와 함께 작동하지만 현재 MacPorts Python 3.2.2와 같은 방식으로 실패합니다 보도했다. MacPorts는 자동으로 Python 3 포트 용 데이터베이스 관리자로 gdbm을 빌드하고 포함합니다. Python 2의 경우 버클리 DB4.6gdbm을 모두 포함합니다. MacPorts 2.7.2가 db46을 사용하고 작동하지만 3.2.2가 gdbm을 사용하여 실패하는 것 같습니다. 아마도 MacPorts 3.1 포트도 유사 할 것입니다. 이것은 더 조사되어야한다.

업데이트 : 당신이 최신 MacPorts를 설치를 사용하는 경우이 가능성이 http://bugs.python.org/issue13007에서보고 된 문제가 최신 gdbm 1.9 및 이상 지원하기 위해 수정이 있었다 것 같습니다 - 현재 MacPorts의 버전은 1.9.1이다가 . 이 수정은 Python 3.2.2가 릴리스 된 후에 적용되었습니다 (3.2.3에 포함됨). MacPorts 사람들은 그것을 파이썬 포트로 백 포트해야한다.

+0

나는 이것을 위해 문제점을 열었습니다 : https://trac.macports.org/ticket/32010 –

+0

흠, 나는 희망을 가졌습니다. 이것이 답이 아니라는 것입니다. 나는 Macports에서 설치 한 후에 파이썬 3.1과 함께 선반을 사용하려고 시도한 첫 번째 사람이라고 생각하기가 어렵지만 거기에 가서 ...

+0

임시 해결 방법에 대한 의견이 있으십니까? 나는 원숭이 패치를 시작하고 싶지 않지만, 적어도 선반 호출에 매개 변수를 전달하여 (적어도)이로드 블록을 통과하게하는 다른 DB를 사용하도록 강제 할 수 있다면 ... –

0

사용 MacPorts를 나 브루은 NDBM를 설치합니다 : 그것은

여기에 대화 형 세션의)하지 않았다. 사용하여 데이터베이스를 만드는 데 사용합니다. 나중에 파일을 열 때 shelvedbm.whichdb을 호출하고 파일을 인식합니다.

+0

흠, ndbm이 범인이지만 macports가 파이썬 3.1 설치를 마무리 한 것 같습니다. 나는 그것을 다른 곳에 가져와야하고 설치를 위해 무엇을 깰 수 있는지 알아야합니다 :-) –