日期 | 作者 | 版本 | 备注 |
---|---|---|---|
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.tgzcd Python-3.9.15./configure --enable-shared --enable-optimizations CFLAGS=-fPIC --prefix=${INSTALL_DIR}makemake 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}/binln -sf python3 pythonln -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 pythonwhich pippython -Vpip -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 = 10000index-url=http://pypi.douban.com/simpleextra-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我的项目,咱们举荐的做法还是如下:
- 在指标机器上源码编译装置同版本或相近版本python源码包。
- 在源机器上python我的项目对应的虚拟环境中执行pip freeze > requirements.txt 生成依赖包文件 requirements.txt
- 在指标机器上生成新的python虚环境,而后倒入源机器生成的requirements.txt文件,执行pip install -r requirements.txt
须要阐明的是,如果是同机器上迁徙或拷贝python我的项目,可选的计划如下:(举荐计划1和3)
- 应用cpvirtualenv
- 或者间接拷贝python虚环境我的项目
- pip freeze/install -r 解冻和新导入依赖库文件requirements.txt