2. 在 Unix 平臺上使用 Python¶
2.1. 獲得並安裝 Python 的最新版本¶
2.1.1. 在 Linux 上¶
在大多數 Linux 發行版上會預先安裝 Python,並作為一個套件提供給所有其他使用者。但是發行版提供的套件可能沒有你想要使用的某些功能,這時你可以選擇從原始碼編譯最新版本的 Python。
如果最新版的 Python 沒有預先安裝,並且不在發行版提供的儲存庫 (repository) 中,你可以輕鬆地為自己使用的發行版建立套件。參閱以下連結:
也參考
- https://www.debian.org/doc/manuals/maint-guide/first.en.html
對於 Debian 用戶
- https://en.opensuse.org/Portal:Packaging
對於 OpenSuse 用戶
- https://docs.fedoraproject.org/en-US/package-maintainers/Packaging_Tutorial_GNU_Hello/
對於 Fedora 用戶
- https://slackbook.org/html/package-management-making-packages.html
對於 Slackware 用戶
2.1.2. 在 FreeBSD 和 OpenBSD 上¶
FreeBSD 用戶應使用以下命令增加套件:
pkg install python3
OpenBSD 用戶應使用以下命令增加套件:
pkg_add -r python pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/<insert your architecture here>/python-<version>.tgz
例如 i386 使用者要獲取 Python 2.5.1 的可用版本:
pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/python-2.5.1p2.tgz
2.2. 建置 Python¶
如果你想自己編譯 CPython,首先要做的是獲取原始碼。你可以下載最新版本的原始碼,也可以直接提取最新的 clone(克隆)。(如果你想要貢獻修補程式碼,也會需要一份 clone。)
建置過程由幾個常用命令組成:
./configure
make
make install
特定 Unix 平臺的配置選項和注意事項通常會詳細地記錄在 Python 原始碼樹 (source tree) 根目錄下的 README.rst 檔案中。
警告
make install
可以覆蓋或偽裝 python3
二進位制檔案。因此,建議使用 make altinstall
而不是 make install
,因為它只安裝 exec_prefix/bin/pythonversion
。
2.4. 雜項¶
要在 Unix 上使用 Python 腳本,你需要讓他們是可執行的 (executable),例如用
$ chmod +x script
並在腳本的頂部放一個合適的 Shebang。以下通常是個好選擇:
#!/usr/bin/env python3
將在整個 PATH
中搜索 Python 直譯器。然而某些 Unix 系統可能沒有 env 命令,因此你可能需要將 /usr/bin/python3
寫死 (hardcode) 成直譯器路徑。
要在 Python 腳本中使用 shell 命令,請見 subprocess
模組。
2.5. 客製化 OpenSSL¶
要使用你所選擇發行商 (vendor) 的 OpenSSL 配置和系統信任儲存區 (system trust store),請找到包含
openssl.cnf
檔案的目錄或位於/etc
的符號連結 (symlink)。在大多數發行版上,該檔案會是在/etc/ssl
或者/etc/pki/tls
中。該目錄亦應包含一個cert.pem
檔案和/或一個certs
目錄。$ find /etc/ -name openssl.cnf -printf "%h\n" /etc/ssl
下載、建置並安裝 OpenSSL。請確保你使用
install_sw
而不是install
。install_sw
的目標不會覆蓋openssl.cnf
。$ curl -O https://www.openssl.org/source/openssl-VERSION.tar.gz $ tar xzf openssl-VERSION $ pushd openssl-VERSION $ ./config \ --prefix=/usr/local/custom-openssl \ --libdir=lib \ --openssldir=/etc/ssl $ make -j1 depend $ make -j8 $ make install_sw $ popd
使用客製化 OpenSSL 建置 Python(參見配置
--with-openssl
和--with-openssl-rpath
選項)$ pushd python-3.x.x $ ./configure -C \ --with-openssl=/usr/local/custom-openssl \ --with-openssl-rpath=auto \ --prefix=/usr/local/python-3.x.x $ make -j8 $ make altinstall
備註
OpenSSL 的修補釋出版 (patch releases) 具有向後相容的 ABI。你不需要重新編譯 Python 來更新 OpenSSL。使用一個新的版本來替代客製化 OpenSSL 安裝版就可以了。