Linux(服務器)版本的Python3.7.4 安裝

1. 源碼下載

從https://www.python.org/下載源碼。
我這裏下載最新的 Python3.7.4。

2. Linux(服務器)版本的Python3.7 編譯並安裝:

命令如下:

$ tar -xzvf Python-3.7.4.tgz
$ cd Python-3.7.4/
$ mkdir build
$cd build
$../configure --prefix=/usr
$make -j8
$sudo make install

錯誤1:

Failed to build these modules:
_ctypes

解決:

sudo apt-get install libffi-dev

錯誤2:

Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

解決:
下載libressl最新穩定版本 2.7.4
https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.7.4.tar.gz

解壓:

 tar -xzvf libressl-2.7.4.tar.gz

編譯安裝:

$ cd libressl-2.7.4
$ ./configure
$ make -j8
$ sudo make install

新建或修改 /etc/ld.so.conf.d/local.conf 配置文件,添加如下內容:
/usr/local/lib
即將 /usr/local/lib 目錄加入到模塊加載目錄。
重新加載共享模塊:

$ sudo ldconfig -v
$ openssl version
    LibreSSL 2.7.4

回到 Python-3.7.4 目錄,編輯安裝文件 Modules/Setup.dist
去掉有關 ssl 編譯代碼的註釋,共 4 行,並修改 SSL 目錄爲 SSL=/usr/local, 如下所示:

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local
_ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto


重新配置、編譯。

錯誤3:

Exception:
Traceback (most recent call last):
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 179, in main
    status = self.run(options, args)
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/install.py", line 255, in run
    with self._build_session(options) as session:
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 93, in _build_session
    insecure_hosts=options.trusted_hosts,
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/download.py", line 344, in __init__
    self.headers["User-Agent"] = user_agent()
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/download.py", line 108, in user_agent
    zip(["name", "version", "id"], distro.linux_distribution()),
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 120, in linux_distribution
    return _distro.linux_distribution(full_distribution_name)
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 675, in linux_distribution
    self.version(),
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 735, in version
    self.lsb_release_attr('release'),
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 892, in lsb_release_attr
    return self._lsb_release_info.get(attribute, '')
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 550, in __get__
    ret = obj.__dict__[self._fname] = self._f(obj)
  File "/tmp/tmpy1hw1kin/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 998, in _lsb_release_info
    stdout = subprocess.check_output(cmd, stderr=devnull)
  File "/media/xxt/install/Python-3.7.4/Lib/subprocess.py", line 395, in check_output
    **kwargs).stdout
  File "/media/xxt/install/Python-3.7.4/Lib/subprocess.py", line 487, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.

解決辦法:
找到lsb_release.py文件和CommandNotFound目錄,把它們拷貝到報的錯誤中subprocess.py所在文件夾

$find  /usr/  -name lsb_release.py
/usr/lib/python3.7/lsb_release.py
/usr/lib/python2.7/dist-packages/lsb_release.py
/usr/lib/python3/dist-packages/lsb_release.py
/usr/share/pyshared/lsb_release.py
$ cp /usr/share/pyshared/lsb_release.py /media/xxt/install/Python-3.7.4/Lib

Python3 查看:

python3
Python 3.7.4 (default, Aug  1 2019, 10:26:11)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.

安裝成功,結束。

3. 切換版本:

基於用戶修改 Python 版本:
想要爲某個特定用戶修改 Python 版本,只需要在其 home 目錄下創建一個 alias(別名) 即可。打開該用戶的 ~/.bashrc 文件,添加新的別名信息來修改默認使用的 Python 版本。

alias python='/usr/bin/python3.7'

一旦完成以上操作,重新登錄或者重新加載 .bashrc 文件,使操作生效。

檢查當前的 Python 版本。

$ python --version
Python 3.7.4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章