Linux中源码编译安装Python3 |
您所在的位置:网站首页 › 源码编译deb › 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.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 |