Ubuntu上的Python 2.7

我是Python新手,正在Linux机器上工作(Ubuntu 10.10)。 它正在运行Python 2.6,但我想运行2.7,因为它具有我想要使用的function。 我被敦促不要安装2.7,并将其设置为我的默认python。

我的问题是,我如何安装2.7并与2.6并排运行?

我在Ubuntu 10.10机器上用pythonbrew做了这个。

$ python -V Python 2.6.6 $ curl -kL https://raw.github.com/utahta/pythonbrew/master/pythonbrew-install | bash $ . $HOME/.pythonbrew/etc/bashrc $ pythonbrew install 2.7.1 $ pythonbrew switch 2.7.1 Switched to Python-2.7.1 $ python -V Python 2.7.1 

我也用它来安装Python 3.2 。

我最近把Python 2.7移植到了Debian上。 由于Ubuntu 10.10比Debian更新,所以如果你可以挤在Ubuntu上,你可以在Ubuntu上做。 我没有访问Ubuntu 10.10系统。 如果我设置一个,我会testing它,并更新这个答案。 所以,这里只是我在Debian上做的一个简短的草图。

首先,一个普遍而明显的评论,但是容易被忽视的东西。 一个人不应该太认真对待Debian软件包的构build依赖关系。 他们可能比需要更具体。 例如,像Python这样的软件,被devise为可移植的并且运行在大量的系统上,不太可能依靠非常特定的软件版本来构build。 运行时依赖关系也可以调整,但是这应该更谨慎。 但是,运行时依赖主要是基于已经在该系统上的软件dynamic生成的,所以通常这不是一个大问题。

 apt-cache policy python2.7 python2.7: Installed: 2.7.2-8 Candidate: 2.7.2-8 Version table: 2.7.2-12 0 50 http://debian.csail.mit.edu/debian/ unstable/main i386 Packages 2.7.2-8 0 50 http://debian.csail.mit.edu/debian/ testing/main i386 Packages *** 2.7.2-8 0 100 /var/lib/dpkg/status 

select我们得到的testing版本

 apt-get source python2.7=2.7.2-8 

看看debian/control ,我们看到下面的构build依赖关系行。

Build-Depends:debhelper(> = 5),quilt,autoconf,libreadline-dev,libtinfo-dev,libncursesw5-dev(> = 5.3),tk8.5-dev,zlib1g-dev,blt-dev(> = 2.4z ),libssl-dev,libexpat1-dev,sharutils,libbz2-dev,libbluetooth-dev [linux-any],locales [!armel!avr32!hppa!ia64!mipsel],libsqlite3-dev,libffi-dev .5),mime-support,libgpm2 [linux-any],netbase,lsb-release,bzip2,libdb4.8-dev,gdb,python,help2man Build-Depends-Indep:python-sphinx Build-Conflicts:tcl8.3 -dev,tk8.3-dev,tcl8.4-dev,tk8.4-dev,python2.7-xml,python-xml,autoconf2.13,libncurses5-dev

这些大部分很容易满足挤压。 用我们的机器上得到的方便的实用程序apt-show-versions

 apt-show-versions debhelper quilt autoconf libreadline-dev libtinfo-dev libncursesw5-dev tk8.5-dev zlib1g-dev blt-dev \ libssl-dev libexpat1-dev sharutils libbz2-dev libbluetooth-dev locales libsqlite3-dev \ libffi-dev mime-support libgpm2 netbase lsb-release bzip2 libdb4.8-dev gdb python help2man python-sphinx autoconf/squeeze uptodate 2.67-2 blt-dev/squeeze uptodate 2.4z-4.2 bzip2/squeeze uptodate 1.0.5-6 debhelper/squeeze-backports uptodate 8.9.13~bpo60+1 gdb/squeeze uptodate 7.0.1-2+b1 help2man/squeeze uptodate 1.38.2 libbluetooth-dev/squeeze uptodate 4.66-3 libbz2-dev/squeeze uptodate 1.0.5-6 libdb4.8-dev/squeeze uptodate 4.8.30-2 libexpat1-dev/squeeze uptodate 2.0.1-7 libffi-dev/squeeze uptodate 3.0.9-3 libgpm2/squeeze uptodate 1.20.4-3.3 libncursesw5-dev/squeeze uptodate 5.7+20100313-5 libreadline-dev/squeeze uptodate 6.1-3 libsqlite3-dev/squeeze uptodate 3.7.3-1 libssl-dev/squeeze uptodate 0.9.8o-4squeeze5 libtinfo-dev not installed locales/squeeze uptodate 2.11.2-10 lsb-release/squeeze uptodate 3.2-23.2squeeze1 mime-support/squeeze uptodate 3.48-1 netbase/squeeze uptodate 4.45 python/squeeze uptodate 2.6.6-3+squeeze6 python-sphinx/squeeze-backports uptodate 1.0.8+dfsg-2~bpo60+1 quilt/squeeze uptodate 0.48-7 sharutils/squeeze uptodate 1:4.9-1 tk8.5-dev/squeeze uptodate 8.5.8-1 zlib1g-dev/squeeze uptodate 1:1.2.3.4.dfsg-3 

我们看到除了libtinfo-dev之外的所有东西都可以在挤压中使用。 我确实有debhelperpython-sphinx的压缩backport版本,但是这两个版本都可以在满足构build要求的版本中使用debian squeeze。

还要注意我已经安装了libncurses5-dev

 apt-show-versions libncurses5-dev libncurses5-dev/squeeze uptodate 5.7+20100313-5 

这两个包都对应于源码包curses 5.7+20100313-5 。 注意到libtinfo-dev事实上取代了libncurses5-dev

 apt-cache show libtinfo-dev Package: libtinfo-dev Source: ncurses Version: 5.9-4 Installed-Size: 279 Maintainer: Craig Small <csmall@debian.org> Architecture: i386 Replaces: libncurses5-dev (<< 5.9-3) Depends: libtinfo5 (= 5.9-4) 

人们不会期望Python 2.7开发这种特定版本的诅咒,实际上它不。 但是,如果您尝试构build不满足所依赖的包的包

 debuild -uc -us dpkg-checkbuilddeps: Unmet build dependencies: libtinfo-dev dpkg-checkbuilddeps: Build conflicts: libncurses5-dev debuild: fatal error at line 1289: You do not appear to have all build dependencies properly met. You can use mk-build-deps to generate a dummy package which Depends on all the required packages, or you can install them manually using dpkg or apt using the error messages just above this message. 

所以,有必要编辑debian/control 。 请注意,您还需要类似地编辑文件debian/control.in ,否则control文件将不正确地从control.in重新生成。 最简单的做法是从Build-Conflicts行中移除libncurses5-dev ,从Build-Dependslibtinfo-dev ,然后再次运行debuild -uc -us 。 如果你打算将这个软件包安装在Debian上的标准默认Python 2.6软件包上,你还需要删除这两行

 Conflicts: python-profiler (<= 2.7.1-2) Replaces: python-profiler (<= 2.7.1-2) 

那些行在那里,因为2.7包含python-profilerfunction。 如果2.7是默认的python,那么python-profiler就不再需要了。 但是,如果将2.7安装为非默认的Python,那么推理就不适用, python-profiler仍然需要2.6。

这应该会成功构build,并生成以下二进制包列表。

 ls -lah *.deb -rw-r--r-- 1 faheem staff 289K Jan 12 02:33 idle-python2.7_2.7.2-8_all.deb -rw-r--r-- 1 faheem staff 1.1M Jan 12 02:34 libpython2.7_2.7.2-8_i386.deb -rw-r--r-- 1 faheem staff 2.5M Jan 12 02:34 python2.7_2.7.2-8_i386.deb -rw-r--r-- 1 faheem staff 12M Jan 12 02:34 python2.7-dbg_2.7.2-8_i386.deb -rw-r--r-- 1 faheem staff 4.9M Jan 12 02:34 python2.7-dev_2.7.2-8_i386.deb -rw-r--r-- 1 faheem staff 6.0M Jan 12 02:33 python2.7-doc_2.7.2-8_all.deb -rw-r--r-- 1 faheem staff 692K Jan 12 02:33 python2.7-examples_2.7.2-8_all.deb -rw-r--r-- 1 faheem staff 1.7M Jan 12 02:34 python2.7-minimal_2.7.2-8_i386.deb 

最后,可以安装二进制包

 dpkg -i python2.7-minimal_2.7.2-8_i386.deb python2.7_2.7.2-8_i386.deb python2.7-dev_2.7.2-8_i386.deb libpython2.7_2.7.2-8_i386.deb 

有时dpkg在一次全部安装时,对于满足依赖关系可能会有点困难,所以如果出现依赖性错误或者以较小的组安装软件包,则可能必须事后运行apt-get -f install

那么如果你唯一需要的东西是argparse(在你的一个评论中看到这个),你可以这样做:

 pip install argparse 

这不完全是一个确切的问题的答案:-),但事实上,如果你只是缺less一些function,许多2.7function实际上来自独立的项目和/或一些兼容性包可以find,例如:

  • argparse
  • 应该在python2.6中使用OrderedDict的哪个实现? : 在pypi OrderedDict
  • 你应该能够用缓冲区replacememoryview

2.7新奇的列表无疑是更长的,但其他大多数新function可能不是一个大错过,作为交换,你不要在你的盒子上乱搞多个python安装。 否则,请使用pythonbrew 🙂

Ubuntu 12.04

安装依赖关系:

 $ sudo apt-get install python-software-properties 

添加回购:

 $ sudo add-apt-repository ppa:fkrull/deadsnakes 

更新回购指数:

 $ sudo apt-get update 

安装Python 3.3:

 $ sudo apt-get install python3.3 

Ubuntu 12.04>更多

安装依赖关系:

 $ sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev 

下载并编译python:

 $ wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2 $ tar jxf ./Python-3.3.0.tar.bz2 $ cd ./Python-3.3.0 $ ./configure --prefix=/opt/python3.3 $ make && sudo make install 

通过创build一个符号链接安装一个py命令一些不错的方法:

 $ mkdir ~/bin $ ln -s /opt/python3.3/bin/python ~/bin/py 

您可以使用virtualenv创build独特的Python环境。 只是新闻,但是Python 2.7有什么你需要的?

另一个select是安装ActivePython,如果你不想自己编译的东西。 它还包括一个二进制包pipe理器 。