2016-11-01 2 views
1
setup.py를 구축하려고 할 때 나는 파이썬 확장 (책략, http://gambit.sourceforge.net/gambit13/build.html)를 설정하려고하고 오류를 얻고있다

는 :사전되지 않음 쓰기 가능 (일반 오래된 setup.py는)

Traceback (most recent call last): File "setup.py", line 32, in <module>

m.Extension.dict = m._Extension.dict

AttributeError: attribute 'dict' of 'type' objects is not writable

이 보인다 특정 유형의 (더 오래된) setup.py 파일에 문제가있을 수 있습니다. 나는 https://pypi.python.org/pypi/setuptools_cython/0.2에 따라 최소한의 예제를 만들어 :

#Using Python 3.6 on Windows 10 (64-bit) 

from setuptools import setup 
#from distutils.extension import Extension 
#^That line can be included or excluded without changing the error  

import sys 
if 'setuptools.extension' in sys.modules: 
    m = sys.modules['setuptools.extension'] 
    m.Extension.__dict__ = m._Extension.__dict__ 

다른 패키지 (Github에서에 arcitc 문제점 # 17 참조) 과거에 비슷한 문제가 있었다 분명히 내 머리 위에가는 일부 파이썬 마법 (의 북극 설정하여 문제를 해결 한 .py는 더 이상 관련 행을 포함하지 않습니다.

문제의 원인에 대한 의견이 있으십니까? 그렇다면 기본 기능을 손상시키지 않고이 오류를 피하기 위해 setup.py를 변경할 수 있습니까?

답변

0

이전 버전의 Python에서는 __dict__ 클래스 개체를 다른 사전을 가리 키도록 변경할 수있었습니다. 새로운 스타일 수업 (출석 한 수업 : object)의 출현으로 바뀌 었습니다. 해당 동작을 얻으려면 Python 2.x 클래스에서 명시 적으로 object을 지정해야합니다. 파이썬 3에서는 이전 스타일의 클래스를 전혀 지원하지 않으므로 파이썬 3에서는 이것이 표준 (및 유일한) 동작입니다.

제 생각에는 사용하려는 모듈이 Python 2 용으로 작성되었으며 명시 적으로 object을 상속받지 않고 이전 스타일의 클래스를 기대하지만 Python 3 때문에 새로운 스타일의 클래스를 얻고있는 것 같습니다. 다른 말로하면, 파이썬 3과 호환되지 않습니다.

0

이 답변은 다소 테스트를 거쳐 두려워요.

@kindall이 문제를 올바르게 진단했다고 생각합니다. 솔루션은 https://github.com/gambitproject/gambit/blob/master/src/python/setup.py에서 문제가되는 4 줄을 제거하는 것입니다.

당신은 너무

#at the top 
from Cython.Build import cythonize 

#at the bottom 

setup(
    # some lines skipped 
    ext_modules=cythonize([libgame]), 
    # etc 
    ) 

이 사이 썬이 모듈은 현재 구축 될 것으로 기대 방법에 대한 http://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html보기를 변경하고 싶습니다.

(나는 다른 파이썬 3 문제에 대해서 생각할 것입니다)