我全新安装了 Debian 9.8,这是当前的稳定发行版。
$ lsb_release --description
Description: Debian GNU/Linux 9.8 (stretch)
Run Code Online (Sandbox Code Playgroud)
本系统包含 Python 3.5.3:
$ python3 --version
Python 3.5.3
Run Code Online (Sandbox Code Playgroud)
不幸的是,那个版本不能满足我的需要。我想要一个更新版本的 Python。在撰写本文时,当前版本为 3.7.2。
希望这对一系列版本有帮助,但为了将范围限制在我们可以非常精确的范围内,这个问题是关于 OS 和 python 版本的上述组合。
进一步指定:我想从 python git 源存储库构建,使用默认配置:./configure
除了可能--prefix
选择自定义安装位置之外,我们将不带任何参数运行。如果可能,我希望任何需要的依赖项都来自标准的 Debian apt 源。
最后也是最重要的:对于我们作为先决条件安装的任何其他软件,请提供有关它的一些信息。不要只是说“安装这个难以理解的 apt 包列表”。
对于 Debian 的延伸存储库中可用的任何依赖项,我需要以下信息:
为了成功完成python的构建/安装步骤,依赖项是否可以被认为是可选的或必须被视为必需的。
指向 apt 包来自的项目主页的链接(如果没有合适的主页,例如 repo url,则下一个最好的链接)。
依赖关系映射到生成的安装中的哪些功能/模块?有时这会很明显,因为项目名称、包名称和用于构建的模块之间的名称相似或相同,但有时不会。
有了这些信息,阅读本文的任何人都可以对他们正在安装的内容及其原因有所了解。确定他们的项目需要哪些依赖项的任务有望变得更加容易。
Cha*_*lie 33
$ sudo apt install git
Run Code Online (Sandbox Code Playgroud)
Python 包含一组模块,这些模块通过链接到其他流行的开源项目来构建。其中许多项目默认作为可执行程序包含在 Debian 中,但将它们链接到 Python 所需的开发文件(头文件、库)是单独打包的,不包含在默认的 Debian 安装中。
其中一些库实际上是 python 构建/安装步骤成功完成所必需的:
| Library | Python Module | Dev Package |
| ---------------------------------- | ------------- | ------------ |
| https://www.zlib.net/ | `zlib` | `zlib1g-dev` |
| https://www.sourceware.org/libffi/ | `_ctypes` | `libffi-dev` |
Run Code Online (Sandbox Code Playgroud)
'Dev Package' 列中的条目是包含我们的 python 构建所需的开发文件的包的名称。
这些“开发”包中的每一个都有一个可能已经安装的相应二进制包。因此,您可能不会通过安装这些软件来向您的系统添加新的软件。您只需安装编译新软件所需的文件(在我们的例子中是更新的python),以便它可以使用它们。(还要注意,这些'dev'包都有它们对应的二进制包作为依赖,所以安装一个dev包将确保它的二进制包也被安装了。)
所以让我们安装它们:
sudo apt install zlib1g-dev libffi-dev
Run Code Online (Sandbox Code Playgroud)
接下来我们有 OpenSSL 库。Python 认为 OpenSSL 是可选的,但您可能需要它。例如,https
如果缺少 SSL/TLS 支持,即使使用 Python 的包安装工具在获取url时也会遇到麻烦。
| Library | Python Module | Dev Package |
| ------------------------ | ------------- | ----------- |
| https://www.openssl.org/ | `_ssl` | `libssl-dev |
Run Code Online (Sandbox Code Playgroud)
让我们安装它:
sudo apt install libssl-dev
Run Code Online (Sandbox Code Playgroud)
下一组软件包更多地属于“可选”类别:
| Library | Python Module(s) | Dev Package |
| ---------------------------------------------------- | ----------------------------- | ------------------ |
| http://www.bzip.org/ | `_bz2` | `libbz2-dev` |
| https://www.gnu.org/software/ncurses/ | `_curses` and `_curses_panel` | `libncursesw5-dev` |
| https://www.gnu.org.ua/software/gdbm/ | `_dbm` and `_gdbm` | `libgdbm-dev` |
| https://tukaani.org/xz/ | `_lzma` | `liblzma-dev` |
| https://www.sqlite.org/ | `_sqlite3` | `libsqlite3-dev` |
| https://www.tcl.tk/software/tcltk/ | `_tkinter` | `tk-dev` |
| https://github.com/karelzak/util-linux | `_uuid` | `uuid-dev` |
| https://tiswww.case.edu/php/chet/readline/rltop.html | `readline` | `libreadline-dev` |
Run Code Online (Sandbox Code Playgroud)
Python 可以在没有这些的情况下构建和安装,而您的应用程序可能不需要它们。另一方面,如果您安装它们,“make”步骤不应报告它无法构建的任何模块,并且二进制文件已经包含在默认的 Debian 安装中。
如果您想继续安装上述所有“可选”软件包,则复制粘贴的命令是:
sudo apt install libbz2-dev libncursesw5-dev libgdbm-dev liblzma-dev libsqlite3-dev tk-dev uuid-dev libreadline-dev
Run Code Online (Sandbox Code Playgroud)
$ git clone git@github.com:python/cpython.git
Cloning into 'cpython'...
[...]
Resolving deltas: 100% (592215/592215), done.
Run Code Online (Sandbox Code Playgroud)
$ cd cpython/
cpython$ git checkout v3.7.2
Note: checking out 'v3.7.2'.
[...]
HEAD is now at 9a3ffc0492... 3.7.2final
cpython$
Run Code Online (Sandbox Code Playgroud)
$HOME/python/v3.7.2
. 我包括了版本号,因为我将来想安装其他版本,并将它们分开。configure
使用此路径作为--prefix
参数运行脚本。(如果您不提供 --prefix 参数,它将默认为/usr/local
)。cpython$ ./configure --prefix=$HOME/python/v3.7.2
[...]
checking for inflateCopy in -lz... yes
[...]
checking for openssl/ssl.h in /usr... yes
[...]
Run Code Online (Sandbox Code Playgroud)
该configure
脚本将检查一堆东西,其中许多是不必要的。但是,可以认为上面输出中显示的那些是必要的。
make
。如果我们包含构建和安装 python 所需的最小依赖项集,输出将在接近尾声时告诉您哪些模块没有构建:cpython$ make
[...]
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2 _curses _curses_panel
_dbm _gdbm _lzma
_sqlite3 _tkinter _uuid
readline
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
Run Code Online (Sandbox Code Playgroud)
make
输出将其描述为“可选”模块列表,但同样,至少对于此特定版本的 python,如果没有zlib
, 和_ctypes
模块,它可能无法成功构建和安装。
make install
。我们已经在configure
步骤中提供了安装位置。如果您的安装位置是根目录(例如/usr/local
),请在此命令前加上sudo
. 因为在这种情况下我要安装到用户拥有的目录,所以我不想这样做。cpython$ make install
Creating directory /home/python/v3.7.2/bin
Creating directory /home/python/v3.7.2/lib
[...]
Run Code Online (Sandbox Code Playgroud)
bin
名为python3
. (请注意,此安装程序不会将任何内容放在bin/python
; 只是bin/python3
。)$ $HOME/python/v3.7.2/bin/python3
Python 3.7.2 (v3.7.2:9a3ffc0492, Mar 10 2019, 19:35:56)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
$
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8857 次 |
最近记录: |