Pip无法安装pylibmc
这是CentOS 6.5的最终版本。
我在用Python 2.7.5,并且使用了Virtualenv这个工具。
> 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这个包。
这是我尝试安装
> 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
有没有人能帮帮我?
4 个回答
1
每个人似乎都需要一些不同的东西!在 Red Hat EL 6.5 上,我需要在 EPEL 的基础上安装 IUS 仓库。这个仓库在 CentOS 6.5 上也可以用。这让我能够安装 libmemcached 1.0.16。
根据 Rackspace 的指南,安装 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
1
今天我在我的CentOS系统上遇到了类似的问题。通过从EPEL库安装了libmemcached-last
和libmemcached-last-devel
这两个软件包,解决了这个问题。
2
我最后从 https://launchpad.net/libmemcached/+download 下载了最新的源代码,然后执行了三个命令:./configure、make 和 make install。
4
对我来说,解决办法是安装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