我很惊讶从我用pip
安装的不同版本的python模块中找到了一个文件。
我使用
安装了pyclusteringpip3 install pyclustering
我系统上的kmedoids.py
文件(属于pyclustering的一部分)属于我认为版本0.6.6(它与此page上的相同),而最近的0.8版本为follows。
仅举例说明,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的版本,所以我很想简单地用最新版本手动替换代码的文件/片段。
我的主要问题是:
答案 0 :(得分:3)
您正在查看主分支,而不是0.8。 actual 0.8 code仍然有self.__medoids
。
答案 1 :(得分:2)
如果您想从当前主服务器中获取仍处于开发阶段的代码,可以直接从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
答案 2 :(得分:1)
在主分支上用源代替现有的0.8.0源代码并不是一个好主意。您需要重建库的核心(库的C ++部分,准备好具有支持C ++ 14的编译器),默认情况下用于处理。否则python代码将尝试从旧版本的核心获取旧版本中可能不存在的服务,因此崩溃将成为结果。
第一种方式。以下是如何从主分支到单独文件夹安装pyclustering的说明(来自pyclustering Wiki的信息):
# 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 ++部分库:
将“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
第三种(不好)方式。只需按来源主分支和删除旧二进制文件替换来源。在这种情况下,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
但这种方式会导致性能下降。
链接到pyclustering Wiki页面:https://github.com/annoviko/pyclustering/wiki/Core-of-the-PyClustering