2016-11-01 4 views
1

Я пытаюсь установить расширение Python (Gambit, http://gambit.sourceforge.net/gambit13/build.html) и я получаю сообщение об ошибке при попытке построить setup.py:словарь не Writable (общий старый 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__ 

Другие пакеты были подобные проблемы в прошлом (см arcitc выпуск # 17 на Github) и, видимо, установил его с помощью какой-то магии Python, который идет над головой (настройка арктический-х .py больше не включает соответствующие строки).

Любые мысли о том, что может вызвать проблему? Если да, есть ли какие-либо изменения, которые я могу внести в setup.py, чтобы избежать этой ошибки, не нарушая основные функции?

ответ

0

В более старых версиях Python раньше было возможно изменить объект классов __dict__, чтобы указать на другой словарь. Это изменилось с появлением новых классов (те, которые произошли от object). Вы должны явно указать object в классах Python 2.x, чтобы получить это поведение; в Python 3 это стандартное (и единственное) поведение, так как Python 3 вообще не поддерживает классы старого стиля.

Я предполагаю, что модуль, который вы пытаетесь использовать, был написан для Python 2, явно не наследуется от object и ожидает класс старого стиля, но получает класс нового стиля, потому что Python 3. In другими словами, он несовместим с Python 3.

0

Этот ответ несколько непроверен, я боюсь.

Я думаю, что @kindall, вероятно, правильно поставил диагноз. Я думаю, что решение состоит в том, чтобы удалить оскорбительные 4 строки из https://github.com/gambitproject/gambit/blob/master/src/python/setup.py.

Затем вы хотите изменить его так

#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 для того, как Cython ожидает модули, которые будут построены в настоящее время.

(я бы ожидал столкнуться с другими проблемами Python 3)

Смежные вопросы