乐趣区

关于python3.x:Linux下Python39任意目录快速编译安装和配置上手实用指南

日期 作者 版本 备注
2022-10-06 dingbinthu@163.com V1.0

本文叙述在 Linux Centos7 零碎下,在任意非标准目录(意味着不须要 root 或 sudo 权限)通过官网源码包编译装置 Python3.9 的疾速装置指南。

因编译装置 Python3.9 可能须要装置一些前置依赖库如 openssl,readline 等,装置这些尽管也能够逐个下载源码编译装置,但略显繁琐,因而还是举荐通过 yum 应用 root 或 sudo 权限一键装置前置依赖项。(因而又必须须要 root 或 sudo 权限)。当然如果你的零碎这些前置依赖项都装置过了就不须要装置了因而还是能够不须要 root 或 sudo 权限的。

1. Yum 一键装置前置依赖项

sudo yum -y install zlib zlib-devel bzip2 bzip2-devel ncurses ncurses-devel readline readline-devel openssl openssl-devel  openssl-static xz lzma xz-devel sqlite sqlite-devel gdbm gdbm-devel tk tk-devel libffi libffi-devel

2. 下载 Python 3.9 官网源码包

去 https://www.python.org/downlo… 下载 Python 3.9.15 的源码包,百度云盘链接地址。下载后的 Python-3.9.15.tgz 大概 25M 很小。

留神:咱们还经常去 pypi.org 官网上去下载 python 库。前面会简略叙述 python 如何在下载 pypi.org 上的库文件后执行安装操作的。

3. Linux 下编译装置 Python 3.9

cd ${TMP_DIR}
tar zxvf Python-3.9.15.tgz
cd Python-3.9.15
./configure  --enable-shared  --enable-optimizations CFLAGS=-fPIC --prefix=${INSTALL_DIR}
make
make install

这里加上 –enable-shared 和 -fPIC 之后能够将 python3 的动态链接库编译进去,个别是 libPython.so,大略 10-30M,生成的 Python 可执行程序的运行依赖于这个动静库。如果不指定改选项编译实现后则会生成一个 libPython.a,生成的 Python 可执行程序就齐全包好了该.a 的全部内容就不依赖与该.a 动态库了。然而如果编译第三方库须要 python 接口的比方 caffe 等,则会报错,所以这里倡议加上下面的 –enable-shared 和 -fPIC 参数。留神:如果哪天你要讲 python 可执行程序拷贝到别的机器,切记要连带上拷贝这个 libPython.so.xxx。它的地位就在 python 装置目标目录下的 lib 目录下。–enable-optimizations 选项个别倡议加上,它能够使得 python 执行时增速 10% 左右。

全程大概 5 - 8 分钟即可编译装置结束。

4.Python 可用初始配置

python3.9 编译装置好之后,要到可用或好用状态,还须要如下初始配置。

4.1 .bashrc 环境变量配置

留神:默认的 python3 高版本之后生成的可执行程序被命令为了 python3 或 pip3. 必须 为期建设 python 和 pip 的软连贯。如下操作:

cd ${INSTALL_DIR}/bin
ln -sf python3 python
ln -sf pip3 pip

接着在~/.bashrc 中增加如下环境变量:

export  PYTHON39_HOME=${INSTALL_DIR}
export  PATH=${PYTHON39_HOME}/bin:${PATH}                       #使得 python pip 等可执行命令能被找到
export  LD_LIBRARY_PATH=${INSTALL_DIR}/lib:${LD_LIBRARY_PATH}   #使得 libPython.so.xx 等库能被找到

export  VIRTUALENVWRAPPER_PYTHON=${PYTHON39_HOME}/bin/python    #virtualenv-wrapper 应用的 python 解释器
export  WORKON_HOME=${HOME}/.venv.2022                          #virtualenv-wrapper 应用 python 配置根目录
source  ${PYTHON39_HOME}/bin/virtualenvwrapper.sh              #使得 mkvirtualenv/workon/deactivate/                                                                      cpvirtualenv/lsvirtualenv/                                                                                cdvirtualenv/rmvirtualenv 等命令能被找到

以上前面 3 行是 virtualenvwrapper 虚环境无关的环境变量和 source 设置,留待前面具体解释。

从新 source ~/.bashrc 后,执行如下命令,显然失常即示意设置无效。

第一次 source 可能会报错 -bash: /xxx/python39/bin/virtualenvwrapper.sh: No such file or directory, 没关系,因为这时候 virtualenvwrapper 还没有装置,待上面操作装置好 virtualenvwrapper 之后这个文件天然就有了。

which python
which pip
python -V
pip -V

4.2 pip 降级和配置

默认的 python3.9 这样的新版本 Python 曾经默认自带装置了 pip 工具。因而曾经不须要额定独立装置 pip 了。无关 pip 要做的事件只有:

4.2.1 设置 pip 配置文件

mkdir ~/.pip    #是 pip 默认配置文件的所在目录,不存在要创立
vim ~/.pip/pip.conf 设置如下内容
#~/.pip/pip.conf 内容
[global]
timeout = 10000
index-url=http://pypi.douban.com/simple
extra-index-url=http://mirrors.aliyun.com/pypi/simple/
#extra-index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
#extra-index-url=http://pypi.mirrors.ustc.edu.cn/simple/

[install]
trusted-host=pypi.douban.com
#trusted-host=mirrors.aliyun.com
#trusted-host=pypi.tuna.tsinghua.edu.cn
#trusted-host=pypi.mirrors.ustc.edu.cn

4.2.2 降级 pip 如果不是最新版本的话。

# 留神执行此命令之前肯定要保障:which python 指向的是方才装置的 python 位 置,才意味着降级的该地位下的 pip,否则可能降级了本机其余地位的 pip。python -m pip install --upgrade pip

4.3 virtualenvwrapper 装置和配置

python 虚拟环境有很多,这里举荐应用弱小的 virtualenvwrapper。

4.3.1 装置 virtualenvwrapper

留神:首次应用 pip install 会报错找不到 pbr,pbr 是新一代 python 打包管理工具,相当于是 setuptools 的升级换代产品。尽管咱们能够不必它,但咱们还是须要一键装置 pbr。(就如同 java 打包咱们能够持续应用 maven 而不应用新一代 gradle 一样)。

# 装置 pbr , 装置完之后 ${PYTHON39_HOME}/bin/pbr 可执行程序会被生成;${PYTHON39_HOME}/lib/python3.9/site-packages 下也会生成 pbr 相干的包。pip install pbr    

#装置 virtualenvwrapper, 装置完之后 ${PYTHON39_HOME}/bin 下会新生成 virtualenv, virtualenv-clone,virtualenvwrapper.sh, virtualenvwrapper_lazy.sh 4 个文件。${PYTHON39_HOME}/lib/python3.9/site-packages 下也会生成 virtualenvwrapper 相干的包。pip install virtualenvwrapper  

4.3.2 配置 virtualenvwrapper

在~/.bashrc 增加如下 3 行无关 virtualenvwrapper 配置如下:

export  VIRTUALENVWRAPPER_PYTHON=${PYTHON39_HOME}/bin/python    #virtualenv-wrapper 应用的 python 解释器
export  WORKON_HOME=${HOME}/.venv.2022                          #virtualenv-wrapper 应用 python 配置根目录
source  ${PYTHON39_HOME}/bin/virtualenvwrapper.sh              #使得 mkvirtualenv/workon/deactivate/                                                                      cpvirtualenv/lsvirtualenv/                                                                                cdvirtualenv/rmvirtualenv 等命令能被找到

从新 source ~/.bashrc,source ${PYTHON39_HOME}/bin/virtualenvwrapper.sh 就不会再报错找不到了。此时 virtualenvwrapper 相干的命令就能够应用了。

留神:virtualenvwrapper 相干命令如 mkvirtualenv 尽管能够应用,但若执行 which mkvirtualenv 时依然找不到,因为它们是 python 函数。能够用 type -a mkvirtualenv 找到该命令的函数实现。

4.3.3 virtualenvwrapper 用法概述

virtualenvwrapper 作为极其弱小的 python 虚拟环境,其惯例用法肯定要纯熟应用。如下:

命令 含意和用法
mkvirtualenv mkvirtualenv -p /path/to/python –copies venv-test1
创立 - p 执行的 python 解释器对应的包环境作为虚拟环境包配置的 python 新的虚拟环境名为 venv-test1. –copies 示意新虚拟环境是拷贝而不是链接源 python 解释器内的命令和包。–copies 举荐必须带上该选项。
workon workon 列举所有虚环境名称, 作用同 lsvirtualenv
workon venv-test1
进入 venv-test1 虚环境,workon 和其余很多命令一样反对 tab 键候选存在的全副的虚拟环境名称列表
deactivate 在某个虚拟环境外部时执行此命令可退出以后虚环境
lsvirtualenv 列举所有虚环境名称
rmvirtualenv rmvirtualenv venv-test1
删除 venv-test1 虚环境
cdvirtualenv cdvirtualenv
必须在某个虚环境外部时执行此命令,能够间接进入到它的徐环境根目录下
cpvirtualenv cpvirtualenv venv1 venv2
拷贝虚环境 venv1 为 venv2

5. python 如何装置.whl 和 .egg 文件

egg 文件是 easy_install 即 setuptools 包的对应 python 工程文件压缩包规范,是上一代的,whl 文件是 pip 对应的压缩包规范,是用来代替 egg 文件的,两者当初都在用。Whl 文件用的更多。在 python 第三方库中,除了源码和二进制 exe 之外,.whl 文件和.egg 文件也是两种罕用的文件类型。

.whl 文件 当初常见的一种二进制格局, 首先须要装置 wheel 库

pip install wheel

而后下载所需的.whl 文件,最初用 pip 命令在.whl 文件所在的地位装置,例如:

pip install h:/path/xxx.whl

.egg 文件 是一种打包,后缀名能够改成 rar,间接解压缩,依照源码的模式装置, 即:

cd 到.egg 文件解压缩后的根目录下,执行
python setup.py install   #这就是所谓源码模式装置

.egg 文件还能够通过 easy_install 命令装置如下:(不过新版本的 python 3.X 里曾经没有 easy_install 命令了,也就没必要再应用这个命令了。)

easy_install  /xx/xx.egg

还有一种最简略的装置办法就是把 egg 文件和 egg 文件解压进去的文件夹间接复制到 Python 的第三方库文件夹..Lib\site-packages 中

6. python -m 和 python 间接运行的区别

python -m 和 python 间接运行的区别景象如下:

>>> python xxx.py # 间接运行
>>> python -m xxx # 相当于 import,叫做当做模块来启动

次要区别在于 sys.path 不同,间接运行会将 该脚本所在目录 增加至 sys.path,而当做模块启动则会将 以后运行命令的门路 增加至 sys.path。

理论利用中假如咱们有如下文件构造:

package1/

|–__init__.py

|–mod1.py

package2/

|–__init__.py

|–run.py

在 run.py 中 import 了 mod1.py

# run.py

from package1 import mod1

python run.py # 失败,提醒找不到 package1

# 切换到 package2 所在目录

python -m package2.run # 胜利

7. python 我的项目跨机器迁徙计划

当然,python 虚拟环境只是隔离过个 python 我的项目的依赖库的最重要的形式之一,但如果是跨机器迁徙 python 我的项目,咱们举荐的做法还是如下:

  1. 在指标机器上源码编译装置同版本或相近版本 python 源码包。
  2. 在源机器上 python 我的项目对应的虚拟环境中执行 pip freeze > requirements.txt 生成依赖包文件 requirements.txt
  3. 在指标机器上生成新的 python 虚环境,而后倒入源机器生成的 requirements.txt 文件,执行 pip install -r requirements.txt

须要阐明的是,如果是同机器上迁徙或拷贝 python 我的项目,可选的计划如下:(举荐计划 1 和 3)

  1. 应用 cpvirtualenv
  2. 或者间接拷贝 python 虚环境我的项目
  3. pip freeze/install -r 解冻和新导入依赖库文件 requirements.txt
退出移动版