Linux中源码编译安装Python3

您所在的位置:网站首页 源码编译deb Linux中源码编译安装Python3

Linux中源码编译安装Python3

2023-04-04 07:19| 来源: 网络整理| 查看: 265

在Linux上使用包管理软件安装python是最稳妥的方式,但有时为了获取软件的最新版本,也经常会用源码编译安装。步骤并不复杂,但是有些细节很容易出错。十分不建议新手编译安装,用包管理软件就可以很方便的安装使用。我就是刚学时被编译安装坑了,后面不断的填当初编译时埋下的坑。

1、下载python源码

用wget从官网下载源码,选择任意版本python3,我选的当时最新的发行版python3.6.4,其中安装包版本Gzipped source tarball即我们所需的源码。

$ wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz2、解压,配置

下载完成后解压,然后添加配置。在configure的选项中,--prefix定义了安装位置,便于以后更新或删除python;--enable-shared指定安装共享库,共享库在使用其他需调用python的软件时会用到,比如使用mod_wgsi连接Apache与python时需要,最好填上。

$ tar -xzvf Python-3.6.4.tgz $ cd Python-3.6.4 $ ./configure --prefix=/usr/local/python3 --enable-shared $ sudo mkdir /usr/local/python33、编译,安装

然后make编译,建议在此之前先用yum deplist python36查看是否缺少某些依赖。编译时间很长,耐心等待,在这一步结束后一定要仔细查看打印的结果,看看是否有错误。如果安装环境中依赖不全,很容易产生错误,而且有的错误并不影响后续安装,甚至python可以“正常”运行,往往等你要用到某些模块时才发现找不到该模块。

完成后安装。

$ make $ sudo make install4、建立软链

然后建立python3和pip3的软链。

$ ln -s /usr/local/python3/bin/python3 /usr/bin/python3 $ ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

建立软链后输入python3即可进入python3解释器,同时你还可以输入python或python2进入python2解释器,二者可以共存。

注意!有的网上教程可能会让你更改软链python连接到python3,这样做的好处仅仅是在打开python解释器时可以直接用python指令,但是这样做的代价则是其他依赖python2的程序可能会因此崩溃。除非你知道自己在做什么,否则不要动原来的python软链,使用python3指令进入解释器比较安全。

5、常见bug

——没有pip

如果安装完后发现pip不能用,很可能是没有安装相应的依赖,碰到这个问题可以参考这篇回答——centos在python3环境下安装PIP的问题?,这里就不赘述了。

——无法导入ssl模块

该模块在涉及到网络的编程中经常会用,我在安装requests时遇到过这个问题。该bug是因为编译python时没有成功安装ssl模块,往往是没有安装openssl导致的。

解决办法很简单,先安装openssl:

yum install openssl openssl-devel

然后重新编译pyhon即可。

make make install

若是依然导入不了ssl模块,试试修改Setup文件后在编译安装一次。

vim Modules/Setup

修改如下:

# Socket module helper for socket(2) _socket socketmodule.c # 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 _ssl.c \ -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ -L$(SSL)/lib -lssl -lcrypto

——Python Shell 中敲击方向键显示「^[[C^[[D」

这篇知乎回答——Python Shell 中敲击方向键显示「^[[C^[[D」,原因是什么?如何修复?——详细的解释了该bug的发生原因及解决方案。

不过该解决方案有点过时,readline包已被弃用,现在改名为gnureadline了,安装该包即可修复方向键的bug。

pip3 install gnureadline

——无法导入sqlite3模块

没想到安装完python3很久以后,又碰上了依赖问题。这次真心不想再编译一遍了,所以就另辟蹊径。

先确保安装了sqlite的开发包,然后用yum下载一个版本相近的python

sudo yum install sqlite-devel sudo yum install python36

然后找到缺少的库文件存放的位置,复制到原来的python的文件夹中,建议一次性把其他缺少的库文件也复制过来,

sudo cp /usr/lib64/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so /usr/local/python3/lib/python3.6/lib-dynload

然后删掉新装的python,恢复软链,然后测试能否导入sqlite3。

sudo yum remove python36 sudo ln -s /usr/local/python3/bin/python3 /bin sudo ln -s /usr/local/python3/bin/pip3 /bin sudo ln -s /usr/local/python3/lib/libpython3.6m.so.1.0 /lib64

虽然也很麻烦,但是速度比重新编译一次python快多了,现在才终于发现yum安装真的又快又好。

T-T

新手绝对不要自己编译python,真的后患无穷。不仅仅只是当前填坑很烦,很久以前埋下的坑时不时会出来捣乱,总不能每次都重新编译一遍吧。我真想再用yum安装一边python,但之前编译的python已经装了不少第三方库,有的库也是安装的时候各种坑,实在是不想去一个个重装。哎,都是泪啊。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3