Ошибка компиляции Matplotlib: TypeError: unorderable types: str() <int()

Я пытаюсь добавить matplotlib-1.4.2 на python 3.4, используя python setup.py build. Согласно документации, она поддерживается на python 3.4. Я получаю следующее сообщение об ошибке:

IMPORTANT WARNING:
    pkg-config is not installed.
    matplotlib may not be able to find some of its dependencies
============================================================================
Edit setup.cfg to change the build options

BUILDING MATPLOTLIB
            matplotlib: yes [1.4.2]
                python: yes [3.4.0 (default, Nov 17 2014, 15:12:48)  [GCC
                        4.1.2 20080704 (Red Hat 4.1.2-48)]]
              platform: yes [linux]

REQUIRED DEPENDENCIES AND EXTENSIONS
                 numpy: yes [version 1.9.1]
                   six: yes [using six version 1.8.0]
              dateutil: yes [using dateutil version 2.2]
                  pytz: yes [using pytz version 2014.9]
               tornado: yes [using tornado version 4.0.2]
             pyparsing: yes [pyparsing was not found. It is required for
                        mathtext support. pip/easy_install may attempt to
                        install it after matplotlib.]
                 pycxx: yes [Official versions of PyCXX are not compatible
                        with matplotlib on Python 3.x, since they lack
                        support for the buffer object.  Using local copy]
                libagg: yes [pkg-config information for 'libagg' could not
                        be found. Using local copy.]
Traceback (most recent call last):
  File "setup.py", line 155, in <module>
    result = package.check()
  File "/users/tools/downloads/matplotlib-1.4.2/setupext.py", line 962, in check
    min_version='2.3', version=version)
  File "/users/tools/downloads/matplotlib-1.4.2/setupext.py", line 446, in _check_for_pkg_config
    if (not is_min_version(version, min_version)):
  File "/users/tools/downloads/matplotlib-1.4.2/setupext.py", line 174, in is_min_version
    return found_version >= expected_version
  File "/users/tools/python-3.4.0/lib/python3.4/distutils/version.py", line 76, in __ge__
    c = self._cmp(other)
  File "/users/tools/python-3.4.0/lib/python3.4/distutils/version.py", line 342, in _cmp
    if self.version < other.version:
TypeError: unorderable types: str() < int()

Просьба помочь в ее решении.

Ответы

Ответ 1

Я столкнулся с подобной ошибкой и смог исправить ее, установив необязательную зависимость. В частности, в моей ситуации есть "ошибка" в distutil, где сравнение версий со свободными версиями может вызвать ошибку в Python 3 из-за неявных сравнений строковых и целочисленных типов в distutils/version.py: 343, который вызывается из настройки Matplotlib. ру. Подробнее см. Issue 14894, если вы хотите.

Поскольку необязательная зависимость не была установлена, проверка номера версии возвращала строку ( "Не удалось идентифицировать версию" ) и, конечно же, ее нельзя сравнивать с числовой версией, в которой было указано то же исключение, которое вы видели.

sudo apt-get install libfreetype6-dev
pip install matplotlib

установлен libfreetype (необязательная зависимость), distutil LooseVersion увидела номер версии, и сравнение было введено правильно. После этого Matplotlib был надежно установлен.