python3源码安装_Linux中源码编译安装Python3

在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.tgz

2、解压,配置

下载完成后解压,然后添加配置。在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/python3

3、编译,安装

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

完成后安装。

$ make

$ sudo make install

4、建立软链

然后建立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」

不过该解决方案有点过时,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已经装了不少第三方库,有的库也是安装的时候各种坑,实在是不想去一个个重装。哎,都是泪啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值