CentOS 源码编译安装 Python3
准备#
yum -y install wget gcc make libffi-devel zlib-devel readline-devel bzip2-devel ncurses-devel sqlite-devel gdbm-devel xz-devel tk-devel openssl-devel
说明:
yum install wget gcc make readline-devel
# 解决 import bz2 报错
yum install bzip2-devel
# 解决 import curses 报错
yum install ncurses-devel
# 解决 import sqlite3 报错
yum install sqlite-devel
# 解决 _dbm _gdbm 缺失提醒
yum install gdbm-devel
# 解决 _lzma 缺失提醒
yum install xz-devel
# 解决 _tkinter 缺失提醒
yum install tk-devel
# 解决 readline 缺失提醒及方向键行为非预期的问题
yum install readline-devel yum install zlib-devel
# 解决ImportError: No module named '_ctypes' 错误
yum install libffi-devel
在Python官网下载
Copy
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
# 下载
xz -d Python-3.7.1.tar.xz
tar -xvf Python-3.7.1.tar # 解压缩
过程#
配置#
Copy
cd Python-3.7.1 ./configure --prefix=/usr/local/python3.7 --enable-optimizations
--prefix
指定了预期安装目录--enable-optimizations
优化选项
生成了Makefile
文件,这个过程不会自动创建/usr/local/python3.7
目录。
编译#
Copy
# 依然在Python-3.7.1目录下 make -j8
安装#
Copy
make install
/usr/local/python3.7
目录被创建了,执行安装。
环境配置#
Copy
ln -s /usr/local/python3.7/bin/python3 /usr/bin/python3 ln -s /usr/local/python3.7/bin/pip3 /usr/bin/pip3
卸载#
如果养成好的习惯,使用了--prefix
参数,那么仅需要删除对应文件夹,去除相关环境变量即可。否则需要进入源码的src
文件夹下,执行make uninstall
。
补充#
安装好之后,输入python3
即可使用,pip3
也可以使用。发现机器本身自带的python2
对应的pip
无法使用,于是重新安装一下pip
:
Copy
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py
【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【
【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【
】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】
】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】
Ubuntu 18.04 下源代码安装的python3.6.6缺少部分库的问题,总结,方便以后处理同类问题参考
2018年07月24日 04:13:37 KunagisaTomo_i 阅读数:1426 标签: ubuntu18.04python3.6.6sqlite3ssltkinter 更多
个人分类: check error
前情提要
python3.6.6的安装
使用官网python3.6.6.tgz安装包,在Ubuntu18.04上进行源代码安装
(这里下载安装的Ubuntu 18系统,自带pythoin3.6.5,没有python2,安装3.6.6后,3.6.5被覆盖)
在构建测试make test的时候,报出以下问题:
-
No module named '_ssl'
-
-
No module named '_tkinter'
-
-
No module named '_msi'
-
-
No module named 'winreg'
-
-
No module named '_bz2'
-
-
No module named '_dbm'
-
-
No module named 'readline'
-
-
No module named '_lzma'
-
-
No module named '_curses'
-
-
No module named '_gdbm'
-
-
No module named '_sqlite3'
-
尝试在python3中导入以上库
比如
-
Python 3.6.6 (default, Jul 21 2018, 10:14:45)
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> import tkinter
-
Traceback (most recent call last):
-
File "<stdin>", line 1, in <module>
-
File "/usr/local/lib/python3.6/tkinter/__init__.py", line 36, in <module>
-
import _tkinter # If this fails your Python may not be configured for Tk
-
ModuleNotFoundError: No module named '_tkinter'
很明显,失败了
解决No module named '_ssl'
因为无法导入ssl,使用pip3安装虚拟环境virtualenv失败了,所以我先解决这个
1、安装openssl,和libssl-dev
-
sudo aptitude install openssl
-
-
sudo aptitude install libssl-dev
2、进入python3.6.6解压目录,配置文件中增添--with-ssl参数,再次进行编译安装
-
cd ~/software/Python3.6.6
-
./configure --with-ssl
-
make
-
sudo make install
3、测试是否能正常导入ssl
-
Python 3.6.6
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> import ssl
-
>>>
这次没有报错,可以正常导入
-
sudo pip3 install virtualenv
-
-
virtualenv --version
-
16.0.0
虚拟环境也安装成功了
No module named '_ssl'问题解决。
解决No module named '_tkinter'
1、安装python3-tk,和tk-dev
-
sudo aptitude install python3-tk
-
-
sudo aptitude install tk-dev
注意这里因为是python3环境,所以是安装python3-tk
如果是python2环境,是安装python-tk
2、进入python3.6.6解压目录,再次进行编译安装
-
cd ~/software/Python3.6.6
-
./configure
-
make
-
sudo make install
进行构建测试make test时,就可以看到
-
The necessary bits to build these optional modules were not found:
-
_bz2 _curses _curses_panel
-
_dbm _gdbm _lzma
-
_sqlite3 readline
No module named 'ssl' ‘No module named 'tkinter' 的提示也已经没有了
tests skipped的提示也减少到19,之前为23
3、测试是否能正常导入tkinter
-
Python 3.6.6
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> import tkinter
-
>>>
没有报错,导入成功
解决No module named '_sqlite3'
在3.6.6上导入sqlite3的包,使用上面apt安装的方法直接安装,然后对python再次编译安装的方法,已经无效了。
所以需要要手动进行sqlite3的源代码安装
源代码下载地址:
https://www.sqlite.org/2018/sqlite-autoconf-3240000.tar.gz
根据时间而定,可以自行去官网下最新的
1、解压下载的源代码压缩包到指定目录(根据个人习惯而定
tar -zxvf sqlite-autoconf-3240000.tar.gz -C ~/software
2、进入刚刚解压出的源代码目录中,进行配置,将sqlite3安装到指定目录,方便下一步设置
-
cd ~/software/sqlite-autoconf-3240000
-
-
./configure --prefix=/usr/local/sqlite3
-
-
make
-
-
sudo make install
3、进入python3解压目录,修改setup.py,增添一条路径
-
cd ~/software/Python3.6.6 #进入目录
-
-
ls # 查看目录中文件及目录列表
-
-
vim setup.py # vim打开文件setup.py
-
-
/sqlite # 定位文档中sqlite的位置
-
-
# 修改setup.py,列表中增添一条路径 '/usr/local/sqlite3/include',
-
sqlite_inc_paths = [ '/usr/include',
-
'/usr/include/sqlite',
-
'/usr/include/sqlite3',
-
'/usr/local/include',
-
'/usr/local/include/sqlite',
-
'/usr/local/include/sqlite3',
-
'/usr/local/sqlite3/include', #添加的路径
-
]
-
-
esc:wq #保存退出
4、python3再次编译安装
-
./configure
-
make
-
sudo make install
进行构建测试make test
-
The necessary bits to build these optional modules were not found:
-
_bz2 _curses _curses_panel
-
_dbm _gdbm _lzma
-
readline
_sqlite3不见了,所以应该是成功了
5、测试是否能正常导入sqlite
-
Python 3.6.6
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> import sqlite3
-
>>>
没有报错,导入成功
解决No module named 'readline'
1、寻找依赖包
版本不同,依赖包会改名字,但是一般都包含关键字(就因为这个,走了多少弯路
Ubuntu查找依赖包的网址:https://packages.ubuntu.com/
终端内使用指令:
apt search 关键字
也可以。
2、先安装两个依赖包
-
sudo aptitude install libncurses5-dev
-
-
sudo aptitude install libreadline-dev
3、进入python3.6.6的目录下,再进入Modules目录,修改Setup.dict
-
vim ~/software/Python3.6.6/Modules/Setup.dist.
-
-
# 查找:/readline readline,找到下面这段代码,把前面的注释号去掉(去掉#号
-
-
readline readline.c -lreadline -ltermcap
-
-
#退出保存,回到上一级目录
-
-
esc:wq
-
cd ..
4、python3再次编译安装
-
./configure
-
make
-
sudo make install
进行构建测试make test,就剩4个了
-
The necessary bits to build these optional modules were not found:
-
_bz2 _dbm _gdbm
-
_lzma
5、测试是否能正常导入readline
-
Python 3.6.6
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> import readline
-
>>>
没有报错,导入成功
PS:通过readline写脚本,可以在Python命令行中使用 tab 命令补全,以及在vim编辑时自动补全,不过另写一篇吧,连续解决这4个包的问题,用时间太多了,去休息会儿。
解决No module named '_dbm'(基本解决)
1、寻找适合的依赖包
能找到的参考资料很少,只好通过查询相关依赖包,通过解读注释来尝试解决
aptitude search dbm
找到的结果很多,i386版本是32位处理器通用的,我用不到,不用看,根据之前的经验,优先找dev或者devel这种开发版本,找到以下两个包:
-
clisp-module-gdbm # clisp模块,为GNU添加接口
-
-
libgdbm-dev
2、python3再次编译安装
-
./configure
-
make
-
sudo make install
进行构建测试make test,就剩3个了
-
The necessary bits to build these optional modules were not found:
-
_bz2 _dbm _lzma
3、测试是否能正常导入dbm gdbm
但是,dbm模块确实已经可以正常导入了
-
`Python 3.6.6
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> import dbm
-
>>>
因为在python3中,gdbm模块已重命名为dbm.gnu,那么测试导入gdbm
-
Python 3.6.6
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> from dbm import gnu
-
>>>
-
都成功导入了,应该是不影响正常使用l,毕竟这时候依赖包最新版本的是针对3.6.5版本,大概是因为这一点差别,所以make test时仍会报错。
-
The necessary bits to build these optional modules were not found:
-
_dbm _lzma
解决No module named '_bz2'(未彻底解决)
1、寻找依赖包和源文件
这个能查到的资料,基本都是centos的,想办法自行解决吧
这是bzip的源文件下载地址:http://www.bzip.org/downloads.html
apt工具的安装bzip包,基本没用,安了和没安一样
sudo aptitude installl libzip-dev
2、解压下载的源代码压缩包到指定目录(根据个人习惯而定
tar -zxvf bzip2-1.0.6.tar.gz -C ~/software
3、进入刚刚解压出的源代码目录中,进行配置,将sqlite3安装到指定目录,方便下一步设置
-
cd ~/software/sqlite-autoconf-3240000
-
./configure --prefix=/usr/local/sqlite3
-
make
-
sudo make install
4、python3再次编译安装
-
./configure
-
make
-
sudo make install
进行构建测试make test,就剩2个了
-
The necessary bits to build these optional modules were not found:
-
_dbm _lzma
所以说啊,是否使用apt工具安装,没什么关系OTL
但是啊,虽然在make test中看不到bz2了,在终端尝试导入,依然是不行的
-
Python 3.6.6
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> import bz2
-
Traceback (most recent call last):
-
File "<stdin>", line 1, in <module>
-
File "/usr/local/lib/python3.6/bz2.py", line 23, in <module>
-
from _bz2 import BZ2Compressor, BZ2Decompressor
-
ModuleNotFoundError: No module named '_bz2'
-
>>>
但是的但是,这时在pycharm中是可以成功导入bz2模块的,真是神奇。。而且即使不对bz2进行源代码安装,pycharm中依然可以导入bz2模块。。。emmmmm
反正就这样吧,我决定回档使用3.6.5,3.6.6在ubuntu18.04上实在太神奇了,有些驾驭不住
补充说明
虽然安装pythoin3.6.6之后,使用命令
pip3 --version
可以看到有安装pip 10.0.1,但是,如果使用pycharm,创建虚拟环境,是会报错的
No module named 'distutils.core'
也就是,没有第三方模块管理工具,并且根据提示也安装不上
此时应退出pycharm,进入终端,安装python3-pip
sudo aptitude install python3-pip
之后在pycharm中根据提示安装工具,就能安装上了
解决No module named '_lzma'
1、安装依赖包
-
sudo aptitude install python-lzma
-
sudo aptitude install liblzma-dev
2、进入python3.6.6解压目录,再次进行编译安装
-
cd ~/software/Python3.6.6
-
./configure
-
make
-
sudo make install
3、测试是否能正常导入lzma
-
Python 3.6.6
-
[GCC 7.3.0] on linux
-
Type "help", "copyright", "credits" or "license" for more information.
-
>>> import lzma
-
>>>
这次没有报错,可以正常导入
另外,make test显示
-
The necessary bits to build these optional modules were not found:
-
_dbm
ok,暂告结束
】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】
】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】
】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】
】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】
遇到问题---centos---运行yum报错:No module named yum
2018年03月14日 11:03:50 张小凡vip 阅读数:6470
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/q383965374/article/details/79551715
情况
我们在公司的集群环境想要使用yum命令进行安装一些组件,报错No module named yum。
完整报错信息如下:
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
No module named yum
Please install a package which provides this module, or
verify that the module is installed correctly.
It's possible that the above module doesn't match the
current version of Python, which is:
2.7.11 (default, Jun 14 2016, 14:13:45)
[GCC 4.8.4]
If you cannot solve this problem yourself, please go to
the yum faq at:
http://yum.baseurl.org/wiki/Faq
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
如图:
原因
yum基于python写的,根据报错信息提示,是yum的python版本对应不上目前python环境的版本导致的。
也就是说 有人升级或者卸载了python。
解决方式
查看yum版本
rpm -qa |grep yum
- 1
查看python版本
whereis python
- 1
输出为
[zzq@host252 thrift-0.11.0]$ whereis python
python: /usr/src/Python-2.7.11/python /usr/bin/python2.6 /usr/bin/python /usr/bin/python2.6-config /usr/lib/python2.6 /usr/lib64/python2.6 /usr/local/bin/python2.7-config /usr/local/bin/python /usr/local/bin/python2.7 /usr/local/lib/python2.7 /usr/include/python2.6 /usr/share/man/man1/python.1.gz
- 1
- 2
发现果然安装了两个版本2.6和2.7版本。
查看python版本
whereis python
- 1
输出为
[zzq@host252 thrift-0.11.0]$ python
Python 2.7.11 (default, Jun 14 2016, 14:13:45)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
- 1
- 2
- 3
- 4
查找yum文件,并编辑此py文件
which yum
- 1
输出为/usr/bin/yum
vi /usr/bin/yum
- 1
如图
点击i键进入编辑模式
将通用的引用修改成指定的引用,引用回旧版本的,我们这里旧版本是whereis python输出的2.6。
#!/usr/bin/python
- 1
改为:
#!/usr/bin/python2.6
- 1
点击esc输入:wq保存退出。
如果报错
File “/usr/sbin/yum-updatesd”, line 35, in
import dbus
ImportError: No module named dbus
则需要找到yum-updatest文件进行一样的修改,使用命令
which yum-updatest
vi /usr/bin/yum-updatest
- 1
- 2
有些版本找不到yum-updatest则不需要修改。
===========================================================================================================================================================================================================================================================================
Python3 is built without lzma support
由 Zaar Hai 在 大约 3 年 之前添加. 更新于 大约 2 年 之前.
状态:
Closed
优先级:
Urgent
指派给:
-
类别:
-
目标版本:
-
开始日期:
2016-05-29
计划完成日期:
% 完成:
100%
预期时间:
Affected versions:
Security IDs:
描述
Hi guys,
I noticed that Python3 is built without lzma support. We rely on it heavily, thus setting priority to Urgent.
From looking at APKBUILD it looks that simply adding 'xz-dev' to makedepends will do the trick.
Symptoms:
root@9b9ebfadbaaa:/# python
Python 3.5.1 (default, Dec 9 2015, 14:41:32)
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lzma
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/lzma.py", line 26, in <module>
from _lzma import *
ImportError: No module named '_lzma'
>>>
python3-alphine.patch (970 Bytes) python3-alphine.patch | Zaar Hai, 2016-05-29 21:13 |
相关修订版本
修订 0944ce49 (差异)
由 Zaar Hai 在 大约 3 年 之前添加
main/python3: enable lzma support
fixes #5655
历史记录
- 状态 从 New 变更为 Resolved
- % 完成 从 0 变更为 100
Applied in changeset 0944ce49cd73571066d7332f1c07312cc52f50e7.
Thanks.
When the new build will be available in edge?
On 30 May 2016 19:00, <alpinelinux@bugs.alpinelinux.org> wrote:
Issue #5655 has been updated by Anonymous.
- Status changed from New to Resolved
- % Done changed from 0 to 100Applied in changeset 0944ce49cd73571066d7332f1c07312cc52f50e7
<https://bugs.alpinelinux.org/projects/alpine/repository/revisions/0944ce49cd73571066d7332f1c07312cc52f50e7>
.
------------------------------
Bug #5655: Python3 is built without lzma support
<https://bugs.alpinelinux.org/issues/5655#change-15676>- Author: Zaar Hai
- Status: Resolved
- Priority: Urgent
- Assignee:
- Category:
- Target version:
- Affected versions:Hi guys,
I noticed that Python3 is built without lzma support. We rely on it
heavily, thus setting priority to Urgent.
From looking at APKBUILD
<http://git.alpinelinux.org/cgit/aports/tree/main/python3/APKBUILD> it
looks that simply adding 'xz-dev' to makedepends will do the trick.Symptoms:
root@9b9ebfadbaaa:/# python
Python 3.5.1 (default, Dec 9 2015, 14:41:32)
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.import lzma
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/lzma.py", line 26, in <module>
from _lzma import *
ImportError: No module named '_lzma'Files python3-alphine.patch
<https://bugs.alpinelinux.org/attachments/download/358/python3-alphine.patch>
(970 Bytes)
------------------------------You have received this notification because you have either subscribed to
it, or are involved in it.
To change your notification preferences, please click here:
https://bugs.alpinelinux.org/my/account
#4 由 Natanael Copa 更新于 大约 3 年 之前
Zaar Hai wrote:
Thanks.
When the new build will be available in edge?
should be available now, but depends on what mirror you use.
Great. I see it on pkgs.alpinelinux.org already.
Thanks,
Zaar
On 30 May 2016 at 20:11, <alpinelinux@bugs.alpinelinux.org> wrote:
Issue #5655 has been updated by Natanael Copa.
Zaar Hai wrote:
Thanks.
When the new build will be available in edge?
should be available now, but depends on what mirror you use.
------------------------------
Bug #5655: Python3 is built without lzma support
<https://bugs.alpinelinux.org/issues/5655#change-15680>- Author: Zaar Hai
- Status: Resolved
- Priority: Urgent
- Assignee:
- Category:
- Target version:
- Affected versions:Hi guys,
I noticed that Python3 is built without lzma support. We rely on it
heavily, thus setting priority to Urgent.
From looking at APKBUILD
<http://git.alpinelinux.org/cgit/aports/tree/main/python3/APKBUILD> it
looks that simply adding 'xz-dev' to makedepends will do the trick.Symptoms:
root@9b9ebfadbaaa:/# python
Python 3.5.1 (default, Dec 9 2015, 14:41:32)
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.import lzma
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/lzma.py", line 26, in <module>
from _lzma import *
ImportError: No module named '_lzma'Files python3-alphine.patch
<https://bugs.alpinelinux.org/attachments/download/358/python3-alphine.patch>
(970 Bytes)
------------------------------You have received this notification because you have either subscribed to
it, or are involved in it.
To change your notification preferences, please click here:
https://bugs.alpinelinux.org/my/account
--
Zaar