我想在Ubuntu上安装最新的Python tarball,可从http://python.org/download/下载。

这是正确的安装方法吗?

./configure
make
make install


如果没有,该怎么办?

评论

一次,我想这是为了在Ubuntu上安装新版本的python而提出的。现在,需要在Ubuntu上安装旧版本的python(因为在很多事情上我们仍然需要python 2.7)... tl; dr:该答案不再是当前的/正确的。相反,假设默认情况下安装了python3(也许是最小的python2.x),然后运行:sudo apt-get install python-2.7 python-pip

@michael_n您在说什么?从源代码编译不会使此答案不正确或过时。它只是一种不同的方法。您可以根据需要使用apt来自动执行该过程。

你用你所需要的。我真的不明白这如何支持您的说法。就像您自己说的那样,您在需要时使用它,因为它可能不可用。例如,用于Linux的Windows子系统甚至使用发行版为ubuntu 16.04.1(beta)的版本,并使用python2.6.2,甚至使用最新版本的python2.7.12的python3。在这种情况下,如果我想要最新的软件包,我应该编译

@jargonjunkie你没话题,但是正确。如果问题是“如何在ubuntu 16.04+上安装python 2.7”(因为16.04现在可用,这是我的观点),那么您只需sudo apt-get install python2.7。这不仅容易,而且是唯一正确的答案,因为这是您能够依次通过apt-get及其依赖项处理python模块安装的唯一方法。

希望这有助于说明(补充答案)。 python生态系统非常特殊/棘手,如果您不仔细构建python环境,就可以轻松进入“依赖地狱” Askubuntu.com/a/831075/17060

#1 楼

首先,安装一些依赖项:

sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev


然后使用以下命令下载:

version=2.7.13
cd ~/Downloads/
wget https://www.python.org/ftp/python/$version/Python-$version.tgz


提取并继续到目录:

tar -xvf Python-$version.tgz
cd Python-$version


现在,使用刚才尝试的命令进行安装,而使用checkinstall代替它,以便在需要时更轻松地卸载:

./configure
make
sudo checkinstall


version更改为所需的版本(例如version=2.7.1version=3.6.0)。

评论


使用sudo make install而不是altinstall将其设置为默认python版本

– Shagun Sodhani
13年7月22日在14:35

如果./configure发出警告说未找到g ++,请使用CXX = g ++ ./configure

–srj
2014年11月7日,11:55

按照上面的指示进行安装后,我应该在控制台中运行哪些命令来检查其是否确实已安装?

– J86
2015年1月29日在10:51



回答“如何安装Python”这个简单问题的最佳答案是非常不寻常的,就像“这是我们知道的安装Python的最佳方法,它很可能会破坏您的系统”。令人惊讶的是,Python官方网站上有大量下载内容,而没有一页安装说明。

–patb
17年5月30日在12:03

pat-对简单问题“如何安装python”的最佳答案是sudo apt-get install python,更复杂的答案是“如何安装最新的python”,其含义是“从源头”。除非您要从第三方安装预编译的二进制文件,否则在任何操作系统上都会遇到相同的问题,这同样在任何操作系统上都有风险(并且在不同的操作系统上差异很大)。同样,这个答案来自2012年。有关更多最新建议,请参见askubuntu.com/questions/101591/…

–迈克尔
17-10-29在5:22



#2 楼

除非您真的有强烈的愿望自己编译它,否则,首选方法是使用DeadSnakes PPA安装默认情况下不包括的Python版本:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python2.7


还提供了其他版本,例如python2.4python3.6等。

评论


程序说明:如果使用的是10.04,则可能需要先使用python-software-properties安装python-software-properties,然后再使用add-apt-repository。

–克雷格·马洛尼(Craig Maloney)
2012年4月9日19:59

建议在您的本地环境中构建python,而不是从预构建二进制文件中安装python

– pylover
13-10-22在1:10

+1 :)真的有强烈的愿望自己编译

–瓦
13年13月13日在22:35

遗漏提及:1. PPA未得到官方认可,因此最安全的方法是从源代码进行构建。 2.这将导致全局python,非sudoer不能修改或将软件包安装到本地,而不是本地。 3.通过从源代码构建,可以在不同位置本地安装多个python。

–艾奥尼斯·菲利皮迪斯(Ioannis Filippidis)
2014年8月9日在1:06

apt-get install python2.7这将安装二进制python2.7而不是python ...丑陋!

–达瓦尔
2015年12月24日19:35



#3 楼

继续为最新的Ubuntu版本1记录此问题:对于Ubuntu 16.04.1服务器,默认的Python版本是3.5,默认情况下未安装Python 2.7。在全新安装(请注意,甚至没有python可执行文件)上:

$ type python3 python2 python 
python3 is /usr/bin/python3
-bash: type: python2: not found
-bash: type: python: not found

$ python3 --version 
Python 3.5.2

$ python --version 
The program 'python' can be found in the following packages:
 * python-minimal
 * python3
Try: sudo apt install <selected package>


注意:在继续之前,您可能需要快速执行sudo apt-get updatesudo apt-get upgradesudo apt-get dist-upgrade(请准确记录这些命令的实际作用;我在这里假设是全新安装。)

安装python 2.7的操作非常简单:

$ sudo apt-get install python2.7


安装python 2.7的初始输出如下:

$ sudo apt-get install python2.7
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7-minimal
Suggested packages:
  python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7 python2.7-minimal
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,735 kB of archives.
After this operation, 15.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc, etc...


安装python 2.7后,

$ type python3 python2.7 python3.5 python2 python
python3 is /usr/bin/python3
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5
bash: type: python2: not found
bash: type: python: not found


但是仍然存在一个问题,因为您还不能通过pip安装PyPI模块-例如,如果您要使用jupyter笔记本电脑,或者最新的scipy或numpy(等),则需要安装pippip install,然后仍然求助于apt-get以安装任何所需的系统依赖项,例如graphviz或核心系统库。

$ type pip3 pip2 pip
bash: type: pip3: not found
bash: type: pip2: not found
bash: type: pip: not found

$ python3 -m pip --version 
/usr/bin/python3: No module named pip


因此,再次安装pip与sudo apt-get install python-pip一样容易:

$ sudo apt-cache search -n pip | egrep '^python[0-9]*-pip'
python-pip - alternative Python package installer
python-pip-whl - alternative Python package installer
python3-pip - alternative Python package installer - Python 3 version of the package


Python 2.7 python-pip和Python 3 pip都需要python3-pip。通过pip进行的安装肯定会安装所需的依赖项;例如,这是安装pip2的输出:

$ sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip-whl
  python-pkg-resources python-setuptools python-wheel python2.7-dev
Suggested packages:
  binutils-doc debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib
  autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib gcc-5-locales libgcc1-dbg
  libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg
  libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg glibc-doc libstdc++-5-doc make-doc python-doc
  python-tk python-setuptools-doc
The following NEW packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip
  python-pip-whl python-pkg-resources python-setuptools python-wheel python2.7-dev
0 upgraded, 49 newly installed, 0 to remove and 0 not upgraded.
Need to get 61.1 MB of archives.
After this operation, 169 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc...


结果是发生了一件有趣的事情:您现在有了“标准”(并建议使用PEP)apt-getpython2(只是与python 2.7和python 3.5的符号链接):

$ type python3 python2 python python2.7 python3.5 
python3 is /usr/bin/python3
python2 is /usr/bin/python2
python is /usr/bin/python
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5


您还希望python3;在安装之前,您需要:

$ type pip pip2 pip3
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
-bash: type: pip3: not found

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
/usr/bin/python3: No module named pip


安装sudo apt-get install python3-pip后,

$ sudo apt-get install python3-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-setuptools python3-wheel python3.5-dev
Suggested packages:
  python-setuptools-doc
The following NEW packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-pip python3-setuptools python3-wheel python3.5-dev
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 38.0 MB of archives.
After this operation, 55.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
...etc...


生成的版本:

$ type python python2 python3 pip pip2 pip3
python is /usr/bin/python
python2 is hashed (/usr/bin/python2)
python3 is hashed (/usr/bin/python3)
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
pip3 is /usr/bin/pip3

$ pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)


在开始安装所有喜欢的python PyPI模块之前,还有最后一件事:您可能必须升级pip本身(分别为pip2和pip3;而且,是否通过pip3可执行文件调用pip也没关系或python可执行文件,实际的升级存储在pip中):

$ sudo -H python2 -m pip install --upgrade pip
...
$ sudo -H python3 -m pip install --upgrade pip
...


您现在可以运行独立的/usr/libpip捆绑的版本(通过python )。


[1]历史回顾:较早的Ubuntu只有Python 2.6,因此安装Python 2.7+的所有各种方法。后来,在将Python 2.7添加到公共存储库之后,我们仍然面临着同样的挑战,即安装(带有)(经常)需要最新补丁的最新Python 2.7。今天的情况要好得多/简单得多:公开存储库中当前存在的当前Python 2.7和3.5(基本上是人们关心的两个Python平台版本)非常稳定,因此现在我们真的只需要担心安装最新的python模块,而不是最新的python。因此,现在,Python“最新版本问题”已部分移出了操作系统存储库和python -m pip {command},并移到了PyPI和apt中。)

评论


在Ubuntu 16.04.1 LTS上按照以下说明成功安装python 2.7和pip,如下所示:sudo apt-get install python2.7; sudo apt-get安装python-pip;须藤-H python2 -m pip install --upgrade pip; #检查版本:$ pip --version-> pip 9.0.1 from /usr/local/lib/python2.7/dist-packages(python 2.7); $ python --version-> Python 2.7.12

– Robert Lujo
17 Mar 3 '17 at 10:55



请原谅我的无知,但我是否知道在显示Python版本时“散列”是什么意思?

–失败的科学家
17-10-7在13:33

@TalhaIrfan这是一个好问题(并且,如果您允许简化的回答):当在bash中键入命令时(如大多数shell),cmd可能是$中的别名,函数或可执行文件。路径。 env var PATH是一长串目录,其中包含数千个文件。为了加快查找可执行文件的速度,shell使用缓存的哈希表进行快速查找。它可能会过时,因此“散列”会让您知道它已“记住”该命令,并将其映射到该可执行文件unix.stackexchange.com/questions/5609/…

–迈克尔
17-10-8在7:54

@michael非常感谢!这是非常有用的答案:简明扼要!

–失败的科学家
17-10-8在7:57

@gaia您可能要问一个单独的问题,因为可能需要更多的来回摸索才能弄清楚(或者自从我撰写本文以来是否有任何变化)。也许,首先验证是否已完全安装/升级了pip(2.7)和pip3(3.x),而不仅仅是前者-即sudo apt-get install python-pip python3-pip和sudo -H python2 -m pip install --upgrade pip和sudo -H python3 -m pip install --upgrade pip ...或者如果这确实是一个权限问题(由“与sudo兼容”表示),那么将有些困难追查。

–迈克尔
18年7月30日在8:24

#4 楼

12.04

如果您遵循Achu的答案,则术语libread5-dev应该更改为libreadline-gplv2-dev。因此完整的命令应为:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev


#5 楼

您还可以通过pyenv下载并安装它。

#Install Pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
export PATH=~/.pyenv/bin:/usr/local/hadoop/bin/:$PATH
echo 'export PYENV_ROOT="~/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

#Install Python
pyenv install 2.7.8
pyenv global 2.7.8

pyenv install 3.4.5
pyenv global 3.4.5


评论


这是在较旧版本的Ubuntu上获取真正最新版本的Python的最干净的方法。通过pyenv-virtualenv插件,它还包括对virtualenv的支持,使安装具有不同模块要求的应用程序变得容易,而不会发生冲突。

– RichVel
17年5月6日15:35

关于pyenv的两个警告:(1)它只能在bash shell(或者zsh,但不一定是破折号,在Ubuntu上是/ bin / sh)起作用,以及(2)它需要登录shell(例如bash --login) ,这并不总是容易实现的,例如来自Ansible。最适合交互式使用,不太适合脚本服务器。

– RichVel
17年5月8日在7:10

#6 楼

大多数情况下,这个问题的答案都带有一个经过调整的前奏

,我会推荐pyenv。除了安装标头依赖项之外,它还使构建过程自动化(请参见下文)。您只需说pyenv install 3.6.0即可构建和安装新(或旧)版本的Python。一切都以您的用户身份运行,因此您不必担心搞乱Ubuntu本身使用的Python。

与某些基于apt-repo的选项(例如,死蛇)相对,它通常会在pyenv update之后的发布之日运行,因为您不需要等待其他人打包它。查看您可以使用pyenv install --list安装的所有版本。

安装pyenv



安装构建CPython所需的工具和标头(PyPy或Jython等异类Python)可能还有其他依赖性)。 pyenv使用了Git,此外它还启用了源分支的构建/安装,因此您现在可以安装任何3.8,即CPython的master分支刚从GitHub下载:

sudo apt-get install -y git
sudo apt-get install -y build-essential libbz2-dev libssl-dev libreadline-dev \
                        libffi-dev libsqlite3-dev tk-dev

# optional scientific package headers (for Numpy, Matplotlib, SciPy, etc.)
sudo apt-get install -y libpng-dev libfreetype6-dev    



运行安装程序脚本(由原作者安装pyenv和一些非常有用的pyenv插件;有关更多信息,请参见此处)。

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash



在您的~/.profile~/.bashrc中添加init行(在安装脚本的末尾提到):

export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"


重新启动外壳程序(关闭并打开或exec $SHELL)或重新加载配置文件脚本。 (例如source ~/.bashrc

完成!

设置环境

不接触系统Python(通常是一个坏主意;操作系统级别)服务可能依赖于某些特定的库版本等)来创建自己的环境,这很容易!更好的是,没有安装sudo或安装pip



安装您喜欢的Python版本(这将下载源代码并为您的用户构建,无需输入)

pyenv install 3.6.0



将其设为virtualenv,以便以后可以根据需要制作其他文件

pyenv virtualenv 3.6.0 general


>
使它在全球范围内处于活动状态(针对您的用户)

pyenv global general


使用Python / pip等执行您想做的事情。

如果以后要清理库,可以删除virtualenv(pyenv uninstall general)或新建一个(en.pyenv virtualenv 3.6.0 other_proj)。您还可以按目录激活活动环境:pyenv local other_proj会将.python-version文件拖放到当前文件夹中,每当您从该文件或其下调用Python或pip安装的Python实用程序时,它们都会被pyenv填充。

故障排除



bash: pyenv: command not foundfish: Unknown command 'pyenv'


检查您的$PATH,应该有一个以.pyenv/bin结尾的条目。如果缺少它,请确保遵循上面的安装pyenv下的#3 AND#4(重新启动外壳)。



pyenv: no such command 'virtualenv'


如果不使用安装程序脚本,则可能只安装了pyenv根软件包。有关添加插件的说明,请参见pyenv-virtualenv。
如果使用了安装程序脚本,请检查其是否与pyenv commands一起显示。