【问题标题】:Pip unable to install pylibmcpip 无法安装 pylibmc
【发布时间】:2015-05-11 22:25:18
【问题描述】:

CentOS 6.5 版(最终版)。

使用 Virtualenv 的 Python 2.7.5。

> rpm -qa '*memcache*'
libmemcached-devel-0.31-1.1.el6.x86_64
libmemcached-0.31-1.1.el6.x86_64
libmemcache-devel-1.4.0-0.1.rc2.el6.rf.x86_64
libmemcache-1.4.0-0.1.rc2.el6.rf.x86_64

@development-tools 已安装。

这是尝试安装 pylibmc 的输出:

> pip install pylibmc
Downloading/unpacking pylibmc
  Running setup.py egg_info for package pylibmc

    warning: no files found matching 'LICENSE'
    warning: no files found matching 'runtests.py'
    warning: no files found matching '*.py' under directory 'pylibmc'
Installing collected packages: pylibmc
  Running setup.py install for pylibmc
    building '_pylibmc' extension
    gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DUSE_ZLIB -I/usr/local/include/python2.7 -c src/_pylibmcmodule.c -o build/temp.
    In file included from src/_pylibmcmodule.c:34:
    src/_pylibmcmodule.h:189: error: ‘MEMCACHED_BEHAVIOR_TCP_KEEPALIVE’ undeclared here (not in a function)
    src/_pylibmcmodule.h:256: error: ‘MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY’ undeclared here (not in a function)
    src/_pylibmcmodule.h:256: error: initializer element is not constant
    src/_pylibmcmodule.h:256: error: (near initialization for ‘PylibMC_distributions[3].flag’)
    src/_pylibmcmodule.h:261: error: ‘MEMCACHED_DISTRIBUTION_CONSISTENT_MAX’ undeclared here (not in a function)
    src/_pylibmcmodule.h:261: error: initializer element is not constant
    src/_pylibmcmodule.h:261: error: (near initialization for ‘PylibMC_distributions[5].flag’)
    src/_pylibmcmodule.c: In function ‘PylibMC_Client_gets’:
    src/_pylibmcmodule.c:571: warning: passing argument 2 of ‘memcached_mget’ from incompatible pointer type
    /usr/include/libmemcached/memcached_get.h:25: note: expected ‘char **’ but argument is of type ‘const char **’
    src/_pylibmcmodule.c: In function ‘pylibmc_memcached_fetch_multi’:
    src/_pylibmcmodule.c:1375: warning: passing argument 2 of ‘memcached_mget’ from incompatible pointer type
    /usr/include/libmemcached/memcached_get.h:25: note: expected ‘char **’ but argument is of type ‘const char **’
    error: command 'gcc' failed with exit status 1
    Complete output from command /home/vagrant/.virtualenvs/cfft2.7/bin/python2.7 -c "import setuptools;__file__='/home/vagrant/.virtualenvs/cfft2.7/build/pylibmc/setup.py';exec(com
    running install

running build

running build_py

running build_ext

building '_pylibmc' extension

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DUSE_ZLIB -I/usr/local/include/python2.7 -c src/_pylibmcmodule.c -o build/temp.linu

In file included from src/_pylibmcmodule.c:34:

src/_pylibmcmodule.h:189: error: ‘MEMCACHED_BEHAVIOR_TCP_KEEPALIVE’ undeclared here (not in a function)

src/_pylibmcmodule.h:256: error: ‘MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY’ undeclared here (not in a function)

src/_pylibmcmodule.h:256: error: initializer element is not constant

src/_pylibmcmodule.h:256: error: (near initialization for ‘PylibMC_distributions[3].flag’)

src/_pylibmcmodule.h:261: error: ‘MEMCACHED_DISTRIBUTION_CONSISTENT_MAX’ undeclared here (not in a function)

src/_pylibmcmodule.h:261: error: initializer element is not constant

src/_pylibmcmodule.h:261: error: (near initialization for ‘PylibMC_distributions[5].flag’)

src/_pylibmcmodule.c: In function ‘PylibMC_Client_gets’:

src/_pylibmcmodule.c:571: warning: passing argument 2 of ‘memcached_mget’ from incompatible pointer type

/usr/include/libmemcached/memcached_get.h:25: note: expected ‘char **’ but argument is of type ‘const char **’

src/_pylibmcmodule.c: In function ‘pylibmc_memcached_fetch_multi’:

src/_pylibmcmodule.c:1375: warning: passing argument 2 of ‘memcached_mget’ from incompatible pointer type

/usr/include/libmemcached/memcached_get.h:25: note: expected ‘char **’ but argument is of type ‘const char **’

error: command 'gcc' failed with exit status 1

----------------------------------------
Command /home/vagrant/.virtualenvs/cfft2.7/bin/python2.7 -c "import setuptools;__file__='/home/vagrant/.virtualenvs/cfft2.7/build/pylibmc/setup.py';exec(compile(open(__file__).read(
Storing complete log in /home/vagrant/.pip/pip.log

谁能帮忙?

【问题讨论】:

    标签: python centos pip libmemcached


    【解决方案1】:

    对我有用的是安装以前版本的 pylibmc。版本 1.3.0 安装失败,所以我退回到 1.2.3

    pip install pylibmc==1.2.3
    

    据我所知 pip 没有显示可用包的好方法,有 yolk 但它似乎只列出 pylibmc==1.3.0。我确信有更好的方法,但是运行安装的数量很大(不太可能有实际的安装候选者),它会输出可能性。如果您知道更好的方法,请告诉我。

    # pip install pylibmc==12222222
    Downloading/unpacking pylibmc==12222222
      Could not find a version that satisfies the requirement pylibmc==12222222 (from versions: 0.2, 0.3, 0.4, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5, 0.6.1, 0.6, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7, 0.8.1, 0.8.2, 0.8, 0.9.1, 0.9.2, 0.9, 1.0-alpha, 1.0-beta, 1.0, 1.1.1, 1.1, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.3.0)
    No distributions matching the version for pylibmc==12222222
    Storing complete log in /root/.pip/pip.log
    

    【讨论】:

      【解决方案2】:

      我最终从https://launchpad.net/libmemcached/+download 下载了最新的源代码,然后执行了 ./configure;make;make install

      【讨论】:

        【解决方案3】:

        我今天在我的 CentOS 机器上遇到了类似的问题。通过从 EPEL repo 安装 libmemcached-lastlibmemcached-last-devel 解决了这个问题。

        【讨论】:

        • 至少对于 EL6 来说,EPEL 中有 libmemcached-last (问题是关于这个的)。您使用的是哪个版本?
        【解决方案4】:

        似乎每个人都需要一些不同的东西!在 Red Hat EL 6.5 上,我需要在 EPEL 之上安装 IUS 存储库。 CentOS 6.5 也可以使用相同的存储库。这让我可以安装 libmemcached 1.0.16。

        来自Rackspace's guide,安装IUS:

        # First install EPEL
        wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
        sudo rpm -Uvh epel-release-6*.rpm
        # Then install IUS for RHEL 6.5
        wget http://dl.iuscommunity.org/pub/ius/stable/RedHat/6/x86_64/ius-release-1.0-13.ius.el6.noarch.rpm
        sudo rpm -Uvh ius-release*.rpm
        # Or for CentOS 6.5
        wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-13.ius.centos6.noarch.rpm
        sudo rpm -Uvh ius-release*.rpm
        

        之后我可以安装更新的 libmemcached(注意不同的包名):

        sudo yum install libmemcached10
        sudo yum install libmemcached10-devel
        

        然后安装最新版本的 pylibmc,如下所示:

        pip install pylibmc
        

        【讨论】:

        • 你当时成功安装的pylibmc版本是多少?我在尝试安装 pylibmc 1.3 版时看到失败
        • 嗨@Priyeshj,这是针对发行版标准 Python 2.6 上的 pylibmc 1.4.2 的。我刚刚看到 pylibmc 1.5“修复了 1.4.2 中引入的常见代码路径中的严重内存泄漏”,所以看起来 1.4.2 不是首选版本!
        猜你喜欢
        • 1970-01-01
        • 2013-01-26
        • 2014-05-20
        • 2020-05-01
        • 2020-10-12
        • 2013-12-21
        • 2014-06-07
        • 2021-09-21
        • 2016-11-10
        相关资源
        最近更新 更多