Gab*_*iel 9 upgrade python 12.04
Ubuntu 12.04python v 2.7.3
默认附带。我想升级到v 2.7.5
. 我尝试了这个问题中给出的说明,
sudo apt-get install build-essential
sudo apt-get install libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
cd ~/Downloads/
wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz
tar -xvf Python-2.7.5.tgz
cd Python-2.7.5
./configure
make
sudo make altinstall
Run Code Online (Sandbox Code Playgroud)
最后一个命令失败并显示错误:
...
Compiling /usr/local/lib/python2.7/xmlrpclib.py ...
Compiling /usr/local/lib/python2.7/zipfile.py ...
make: *** [libinstall] Error 1
Run Code Online (Sandbox Code Playgroud)
如何进行此升级?
Kev*_*wen 13
当然,可以从源代码安装,但出于以下几个原因,我会犹豫是否从源代码升级我的 Ubuntu 系统的 python 包:
这样做可能会通过从源代码直接编译来破坏系统(我不确定 Ubuntu 如何自定义他们的 Python 包构建)。
我担心将来使用存储库中的模块可能会出现问题。
有一个看起来很活跃的PPA(2.7.x 火车最后一次建造是在今年 4 月),但 PPA 还没有 2.7.5 版本。您可能想 ping 维护者,看看他们对未来构建的计划是什么,以及他们是否打算为 2.7.5 包含一个。如果可能的话,我会推荐这个而不是从源代码安装。与任何新软件一样,我建议首先在测试系统上构建它。
另一种选择是使用沙箱(pyenv
)来运行任何新的未经测试的软件包。直接安装到系统上可能会对机器的运行产生不利影响。
pyenv包将允许在您的机器上安装非系统 Python 版本,而不会影响您机器上安装的主要 Python 包(再次:您的系统依赖于当前安装的 Python 版本,升级它可能会破坏您的系统)。以前,建议使用Pythonbrew将 python 包与系统隔离,但此后已被弃用并被pyenv
包取代。
该pyenv
软件包提供以下功能:
在 ~/.pyenv 中查看 pyenv。
git clone git://github.com/yyuu/pyenv.git .pyenv
Run Code Online (Sandbox Code Playgroud)将 ~/.pyenv/bin 添加到您的 $PATH 以访问 pyenv 命令行实用程序。
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
Zsh 注意:修改您的~/.zshenv
文件而不是~/.bash_profile
.
将 pyenv init 添加到您的 shell 以启用垫片和自动完成。
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
Zsh 注意:修改您的~/.zshenv
文件而不是~/.bash_profile
.
重新启动您的 shell,以使路径更改生效。您现在可以开始使用 pyenv。
exec $SHELL
Run Code Online (Sandbox Code Playgroud)将 Python 版本安装到 ~/.pyenv/versions 中。例如,要安装 Python 2.7.5,请下载并解压源代码,然后运行:
pyenv install 2.7.5
Run Code Online (Sandbox Code Playgroud)
注意如果您需要传递配置选项以从源代码构建,请使用 CONFIGURE_OPTS 环境变量。
重建 shim 二进制文件。每次安装新的 Python 二进制文件时(例如,安装新的 Python 版本时,或安装提供二进制文件的包时),都应该执行此操作。
pyenv rehash
Run Code Online (Sandbox Code Playgroud)