Ubuntu上的Python 2.7


72

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

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

Answers:


108

我在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


2
这行是什么?$ HOME / .pythonbrew / etc / bashrc可以吗?
bharal

另外,我不应该将pythonbrew设置为始终可用吗?这不是说我需要...嗯,做点什么吗?如果我注销并再次登录,我的pythonbrew被遗忘了。我认为上面那条线与它有关...但是什么呢?
bharal

没错,该行通过运行该文件中的所有命令来设置pythonbrew。只需将该行添加到您的.bashrc文件中,以便它每次都发生。
oylenshpeegul 2012年


这确实对我有帮助!谢谢
Ivantha '16

10

我最近将Python 2.7反向移植到Debian压缩中。由于Ubuntu 10.10比Debian压缩版本新,因此如果您可以在压缩版本上进行压缩,那么当然可以在Ubuntu上进行压缩。我无权访问Ubuntu 10.10系统。如果设置了一个,我将对其进行测试并更新此答案。因此,这里是我对Debian所做的简要概述。

首先,是一个普遍而明显的评论,但很容易被忽略。人们不应该太重视Debian软件包列出的构建依赖关系。它们可能比需要的更加具体。例如,像Python这样的软件被设计为可移植并可以在多种系统上运行,因此不太可能依赖非常特定的软件版本来构建。也可以调整运行时依赖关系,但应格外小心。但是,运行时依赖关系通常是基于此系统上已经存在的软件动态生成的,因此通常这不是大问题。

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

选择我们得到的测试版本

apt-get source python2.7=2.7.2-8

看一下debian/control,我们看到以下构建依赖项行。

构建依赖: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],语言环境[!armel!avr32!hppa!ia64!mipsel],libsqlite3-dev,libffi-dev(> = 3.0 .5),mime支持,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,但是这两种也可用于在满足建设要求的Debian挤压。

还要注意我已经安装了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会在curses的这一特定版本上开发,实际上并不是这样。但是,如果您在不满足依赖关系的情况下尝试构建软件包,则会得到

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。最简单的操作是libncurses5-dev 从该Build-Conflicts行和libtinfo-devBuild-Depends行中删除,然后运行debuild -uc -us 再次。如果要在Debian squeeze上与标准默认Python 2.6软件包一起安装此软件包,则还需要删除这两行

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

这些行在那里,因为2.7包含python-profiler功能。如果2.7是默认的python,则python-profiler不再需要。但是,如果将2.7安装为非默认Python,则该推理将不适用,而python-profiler2.6仍然需要。

这应该可以成功构建,并产生以下二进制软件包列表。

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,如果遇到依赖项错误,则可能必须稍后运行,或者将软件包安装在较小的组中。


您是否已打包此python-2.7-squeeze端口?
QwiglyDee 2012年

@qMax:我确实基于这些评论构建了一个程序包,是的。但是我没有把它放到任何地方。
Faheem Mitha 2012年

如果2.7.1-8就足够了,那就容易了。从“ deb-src ... snapshot.debian.org ...测试主程序”中获取它,apt-get build-dep python2.6,apt-get install libexpat1 libexpat-dev。并pbuild它按原样挤压。
alexei 2012年

5

好吧,如果您唯一需要的是argparse(在您的评论之一中看到了!),您可以这样做:

pip install argparse

这并不是对确切问题的完全回答:-),但是确实,如果您只缺少一些功能,则实际上有2.7个功能实际上来自独立项目和/或可以找到一些兼容性软件包,例如:

2.7种新颖性的列表当然要更长一些,但是其他大多数新功能可能并不是什么大不了的,作为交换,您不必在盒子上安装多个python。否则请使用pythonbrew :-)


3

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

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

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

1

只需从http://www.python.org/download/releases/2.7.1/下载Python 2.7并进行构建即可。


1
谢谢。我掌握了这一部分,但我的问题更多是关于如何在两个版本之间来回切换。对于ruby,我使用RVM来管理多个Ruby版本。Python中是否有等效项,还是没有必要?
jimdolan 2011年

11
但是,请使用“ make altinstall”而不是“ make install”。“ make install”会将2.7配置为默认版本,您不希望这样做。“ make altinstall”将保留系统Python,而您只需要使用“ python2.7”来调用它。
casevh 2011年

是的,make altinstall是必经之路。
codeape 2011年

1
嗯 您不能“只是构建它”。您将需要构建依赖项。在尝试从源代码进行构建之前,请尝试“ aptitude build-dep python2.7”,如果不起作用,请尝试“ aptitude build-dep python2.6”。如果不这样做,您将丢失许多重要的库。
詹森·库姆斯

1

您可以使用virtualenv创建不同的Python环境。只是新闻,但是Python 2.7需要什么?


2
我想使用argparse。我是python新闻,但不是dev新闻;)
jimdolan 2011年

1
正则表达式上的标志!
尼尔斯2012年

国旗出现在2.7之前,AFAIK。
汤姆(Tom)

要创建新的virtualenv,您需要在系统上安装python。如果仅安装了2.6,则无法使用python 2.7创建virtualenv!
PawelRoman 2014年

@PawelRoman否,但是OP告诉我们不要将其默认Python设置为2.7。仍可以安装它而不将其设置为默认值。
汤姆

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.