最近pip安装Python模块后错误的文件版本

时间:2018-05-14 22:32:02

标签: python python-3.x pip

我很惊讶从我用pip安装的不同版本的python模块中找到了一个文件。

我使用

安装了pyclustering
pip3 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的版本,所以我很想简单地用最新版本手动替换代码的文件/片段。

我的主要问题是:

  1. 可能导致这种不一致的原因是什么?
  2. 有没有更好的方法 解决它比手动更改文件?
  3. 手册是否会改变 引起任何问题,例如通过更新模块时 点还是其他?

3 个答案:

答案 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 ++部分库:

  1. 打开'pyclustering / ccore /'文件夹。
  2. 使用Microsoft Visual Studio 2015打开解决方案'ccore.sln'。
  3. 选择平台(x64 - 适用于64位,x86 - 适用于32位)。
  4. 构建'ccore'项目。
  5. 将“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