我有安装了Red Hat Linux 7.2的Amazon EC2实例。 它带有安装在系统上的Python 2.7.5。
我已经编译了Python 2.7.8的替代安装(这是我在另一个我试图复制的环境中使用的)。 我将使用这个来创build一个virtualenv来启动我的Django应用程序。
但是调用python2.7总是把我带到系统范围的python 2.7.5解释器。
我按照以下说明操作: http : //toomuchdata.com/2014/02/16/how-to-install-python-on-centos/
$ sudo yum groupinstall 'development tools' $ sudo yum install zlib-dev openssl-devel sqlite-devel bzip2-devel $ sudo yum install wget $ sudo wget http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz $ sudo yum install xz-libs $ xz -d Python-2.7.8.tar.xz $ tar -xvf Python-2.7.8.tar $ cd Python-2.7.8
编辑文件/etc/ld.so.conf添加行
/usr/local/lib $sudo /sbin/ldconfig --> make the dynamic linker aware of the change $sudo ./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared $make
我收到以下消息,但我不确定这是否与我的问题有关。
Python build finished, but the necessary bits to build these modules were not found: _bsddb _tkinter bsddb185 dbm dl gdbm imageop sunaudiodev To find the necessary bits, look in setup.py in detect_modules() for the module's name. $sudo make altinstall $which python /usr/bin/python ---> system wide Python 2.7.5 $which python2.7 /usr/local/bin/python2.7 ---> this should point to Python 2.7.8 that was compiled and installed.
但是调用python2.7指向系统范围的Python 2.7.5解释器:
$python2.7 Python 2.7.5 (default, Oct 11 2015, 17:47:16) [GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
为什么发生这种情况?
仅供参考,我的path包括/ usr / local / bin。
$echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
参考: http : //koansys.com/tech/building-python-with-enable-shared-in-non-standard-location “我可以使用”ldd“将它们的库添加到系统缓存中,只要没有其他版本相同的蟒蛇需要这个。“
我通过删除/etc/ld.so.conf中的/ usr / local / lib来解决我的问题,而是用-rpath选项指定LDFLAGS,如下所示:
$sudo ./configure --prefix=/usr/local/python --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/python/lib"
注意它是-W1而不是-W1(即小写字母L而不是数字1)。 我花了好几个小时找出这个错误! 感谢gcc soname无法识别的命令行指出了这一点。
$make $sudo make altinstall
这工作,并从这个路径调用Python解释器工作正常:
$/usr/local/python/bin/python2.7 -- version Python 2.7.8
Web上的大多数教程都演示了如何并行安装两个不同版本的Python,例如Python 2.6.x和2.7.x或Python 2.7.x和3.3.x.
但是,如果两个安装都是Python 2.7.x,那么如果在/etc/ld.so.conf中指定了自定义安装的路径,似乎就会出现问题 – 可能被拾取的库属于系统默认设置… I还没有明白到底是怎么回事。
我还在.bashrc的PATH中添加了/ usr / local / python / bin。
但是,在后续安装setuptools,pip,virtualenv和virtualenvwrapper的步骤中,我仍然必须明确地调用python2.7或pip2.7的完整路径,否则,软件包将安装在/usr/lib/python2.7/site -packages /而不是/usr/local/python/lib/python2.7/site-packages。