Неправильная версия файла после недавней установки модуля Python в pip - PullRequest
0 голосов
/ 15 мая 2018

Я удивлен, обнаружив файл из другой версии модуля python, который я установил с pip.

Я установил Пикластеризация , используя

pip3 install pyclustering

Файл kmedoids.py в моей системе (который является частью pyclustering) принадлежит, я полагаю, к версии 0.6.6 (она такая же, как на этой странице ), тогда как самая последняя версия 0.8 имеет вид следует .

Только для иллюстрации, версия 0.6.6 имеет эту функцию:

def get_medoids(self):
    """!
    @brief Returns list of medoids of allocated clusters.

    @see process()
    @see get_clusters()

    """

    return self.__medoids;

в то время как в версии 0.8 это должно быть:

def get_medoids(self):
    """!
    @brief Returns list of medoids of allocated clusters represented by indexes from the input data.

    @see process()
    @see get_clusters()

    """

    return self.__medoid_indexes;

Я почти уверен, что у меня установлен 0.8, так как я попробовал pip3 show pyclustering который вернулся:

Metadata-Version: 1.1
Name: pyclustering
Version: 0.8.0
Summary: pyclustring is a python data mining library
Home-page: https://github.com/annoviko/pyclustering
Author: Andrei Novikov
Author-email: pyclustering@yandex.ru
License: GNU Public License
Location: /usr/local/lib/python3.5/dist-packages
Requires: 
Classifiers:

Поскольку мне нужна версия от 0.8, у меня возникает соблазн просто вручную заменить файл / фрагмент кода самой последней версией.

Мои основные вопросы:

  1. Что может быть причиной этого несоответствия?
  2. Есть ли лучший способ решить, чем вручную изменить файл?
  3. Будет ли изменение вручную вызвать какие-либо проблемы в будущем, например, при обновлении модуля через Пип или иначе?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Если вы хотите получить код от текущего мастера, который все еще находится в разработке, вы можете установить пакет прямо из репозитория git:

$ pip3 uninstall -y pyclustering  # remove the current installation
$ pip3 install git+https://github.com/annoviko/pyclustering.git@master

или установите из zipfile:

$ pip3 install https://github.com/annoviko/pyclustering/archive/master.zip
0 голосов
/ 16 мая 2018

Не стоит заменять существующие источники 0.8.0 источниками в основной ветке. Вам необходимо перестроить ядро ​​библиотеки (часть библиотеки C ++, будьте готовы иметь компилятор, поддерживающий C ++ 14), который используется по умолчанию для обработки. В противном случае код Python будет пытаться получить сервисы из старой версии ядра, которые могут не существовать в старой версии, поэтому в результате произойдет сбой.

Первый способ. Вот инструкция, как установить пикластеринг из главной ветки в отдельную папку (информация из вики по пикластеризации):

# download pyclustering from official repository:
mkdir pyclustering
cd pyclustering
git clone https://github.com/annoviko/pyclustering.git .

# compile C++ part of the library:
cd ccore
make ccore_x64   # in case of 64-bit python version
# make ccore_x86   # in case of 32-bit python version

# if you don't know which version of python is install then compile both
# make ccore

В случае Windows, часть библиотеки C ++ может быть скомпилирована следующим образом:

  1. Открыть папку 'pyclustering / ccore /'.
  2. Открыть решение ccore.sln с помощью Microsoft Visual Studio 2015.
  3. Выберите платформу (x64 - для 64-битной, x86 - для 32-битной).
  4. Сборка проекта ccore.

Добавить путь к папке 'pyclustering' в PYTHONPATH, например, для linux:

# return to parent folder of the pyclustering library
cd ../

# add current folder (that is parent folder for pyclustering) to python path
PYTHONPATH=`pwd`
export PYTHONPATH=${PYTHONPATH}

Если вы не можете собрать часть библиотеки C ++, она все равно будет работать, pyclustering обнаружит отсутствие двоичных файлов и будет использовать только реализацию Python. Но я хотел бы подчеркнуть, что очень опасно смешивать исходники Python с неправильными двоичными файлами.

Второй способ. Вы можете попробовать уже предложенный способ установки в предыдущем посте, но все же двоичная часть библиотеки должна быть построена для ускорения работы библиотеки:

pip3 uninstall -y pyclustering  # remove the current installation
pip3 install git+https://github.com/annoviko/pyclustering.git@master
cd <path_to_pyclustering>/ccore
make ccore_x64 # in case of 64-bit python version
# make ccore_x86   # in case of 32-bit python version

# if you don't know which version of python is install then compile both
# make ccore

Третий (плохой) способ. Просто замените источники на ветку master источников и удалите старые двоичные файлы . В этом случае pyclustering обнаруживает отсутствие ядра и будет использовать код на Python, как я уже упоминал выше.

rm pyclustering/pyclustering/core/x64/linux/ccore.so
rm pyclustering/pyclustering/core/x86/linux/ccore.so
rm pyclustering/pyclustering/core/x64/win/ccore.dll
rm pyclustering/pyclustering/core/x86/win/ccore.dll

Но этот путь ведет к снижению производительности.

Ссылка на пик-кластеризацию вики-страницы: https://github.com/annoviko/pyclustering/wiki/Core-of-the-PyClustering

0 голосов
/ 15 мая 2018

Вы смотрите на ветку master, а не на 0.8. фактический код 0,8 все еще имеет self.__medoids.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...