pylzma

本文详细介绍了在CentOS环境下从源码编译安装Python3的过程,包括必要的依赖库安装、配置、编译、安装及环境配置步骤。同时,针对Ubuntu18.04下源代码安装Python3.6.6时遇到的缺少库问题,提供了具体的解决方案。

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的时候,报出以下问题:

 
  1. No module named '_ssl'

  2. No module named '_tkinter'

  3. No module named '_msi'

  4. No module named 'winreg'

  5. No module named '_bz2'

  6. No module named '_dbm'

  7. No module named 'readline'

  8. No module named '_lzma'

  9. No module named '_curses'

  10. No module named '_gdbm'

  11. No module named '_sqlite3'

尝试在python3中导入以上库

比如

 
  1. Python 3.6.6 (default, Jul 21 2018, 10:14:45)

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> import tkinter

  5. Traceback (most recent call last):

  6.  File "<stdin>", line 1, in <module>

  7.  File "/usr/local/lib/python3.6/tkinter/__init__.py", line 36, in <module>

  8.    import _tkinter # If this fails your Python may not be configured for Tk

  9. ModuleNotFoundError: No module named '_tkinter'

很明显,失败了

 

 

解决No module named '_ssl'

因为无法导入ssl,使用pip3安装虚拟环境virtualenv失败了,所以我先解决这个

1、安装openssl,和libssl-dev

 
  1. sudo aptitude install openssl

  2. sudo aptitude install libssl-dev

2、进入python3.6.6解压目录,配置文件中增添--with-ssl参数,再次进行编译安装

 
  1. cd ~/software/Python3.6.6

  2. ./configure --with-ssl

  3. make

  4. sudo make install

3、测试是否能正常导入ssl

 
  1. Python 3.6.6

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> import ssl

  5. >>>

这次没有报错,可以正常导入

 
  1. sudo pip3 install virtualenv

  2. virtualenv --version

  3. 16.0.0

虚拟环境也安装成功了

No module named '_ssl'问题解决。

 

 

解决No module named '_tkinter'

1、安装python3-tk,和tk-dev

 
  1. sudo aptitude install python3-tk

  2. sudo aptitude install tk-dev

注意这里因为是python3环境,所以是安装python3-tk

如果是python2环境,是安装python-tk

2、进入python3.6.6解压目录,再次进行编译安装

 
  1. cd ~/software/Python3.6.6

  2. ./configure

  3. make

  4. sudo make install

进行构建测试make test时,就可以看到

 
  1. The necessary bits to build these optional modules were not found:

  2. _bz2                 _curses               _curses_panel      

  3. _dbm                 _gdbm                 _lzma              

  4. _sqlite3             readline  

No module named 'ssl' ‘No module named 'tkinter' 的提示也已经没有了

tests skipped的提示也减少到19,之前为23

3、测试是否能正常导入tkinter

 
  1. Python 3.6.6

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> import tkinter

  5. >>>

没有报错,导入成功

 

 

解决No module named '_sqlite3'

在3.6.6上导入sqlite3的包,使用上面apt安装的方法直接安装,然后对python再次编译安装的方法,已经无效了。

所以需要要手动进行sqlite3的源代码安装

源代码下载地址:

https://www.sqlite.org/2018/sqlite-autoconf-3240000.tar.gz

根据时间而定,可以自行去官网下最新的

https://www.sqlite.org/

1、解压下载的源代码压缩包到指定目录(根据个人习惯而定

tar -zxvf sqlite-autoconf-3240000.tar.gz -C ~/software

2、进入刚刚解压出的源代码目录中,进行配置,将sqlite3安装到指定目录,方便下一步设置

 
  1. cd ~/software/sqlite-autoconf-3240000

  2. ./configure --prefix=/usr/local/sqlite3

  3. make

  4. sudo make install

3、进入python3解压目录,修改setup.py,增添一条路径

 
  1. cd ~/software/Python3.6.6 #进入目录

  2. ls # 查看目录中文件及目录列表

  3. vim setup.py # vim打开文件setup.py

  4. /sqlite # 定位文档中sqlite的位置

  5. # 修改setup.py,列表中增添一条路径 '/usr/local/sqlite3/include',

  6. sqlite_inc_paths = [ '/usr/include',

  7.                             '/usr/include/sqlite',

  8.                             '/usr/include/sqlite3',

  9.                             '/usr/local/include',

  10.                             '/usr/local/include/sqlite',

  11.                             '/usr/local/include/sqlite3',

  12.                             '/usr/local/sqlite3/include', #添加的路径

  13.                             ]

  14. esc:wq #保存退出

4、python3再次编译安装

 
  1. ./configure

  2. make

  3. sudo make install

进行构建测试make test

 
  1. The necessary bits to build these optional modules were not found:

  2. _bz2                 _curses               _curses_panel      

  3. _dbm                 _gdbm                 _lzma              

  4. readline                

_sqlite3不见了,所以应该是成功了

5、测试是否能正常导入sqlite

 
  1. Python 3.6.6

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> import sqlite3

  5. >>>

没有报错,导入成功

 

 

解决No module named 'readline'

1、寻找依赖包

版本不同,依赖包会改名字,但是一般都包含关键字(就因为这个,走了多少弯路

Ubuntu查找依赖包的网址:https://packages.ubuntu.com/

终端内使用指令:

apt search 关键字

也可以。

2、先安装两个依赖包

 
  1. sudo aptitude install libncurses5-dev

  2. sudo aptitude install libreadline-dev

3、进入python3.6.6的目录下,再进入Modules目录,修改Setup.dict

 
  1. vim ~/software/Python3.6.6/Modules/Setup.dist.

  2. # 查找:/readline readline,找到下面这段代码,把前面的注释号去掉(去掉#号

  3. readline readline.c -lreadline -ltermcap

  4. #退出保存,回到上一级目录

  5. esc:wq

  6. cd ..

4、python3再次编译安装

 
  1. ./configure

  2. make

  3. sudo make install

进行构建测试make test,就剩4个了

 
  1. The necessary bits to build these optional modules were not found:

  2. _bz2                 _dbm                 _gdbm              

  3. _lzma  

5、测试是否能正常导入readline

 
  1. Python 3.6.6

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> import readline

  5. >>>

没有报错,导入成功

 

PS:通过readline写脚本,可以在Python命令行中使用 tab 命令补全,以及在vim编辑时自动补全,不过另写一篇吧,连续解决这4个包的问题,用时间太多了,去休息会儿。

 

 

解决No module named '_dbm'(基本解决)

1、寻找适合的依赖包

能找到的参考资料很少,只好通过查询相关依赖包,通过解读注释来尝试解决

aptitude search dbm

找到的结果很多,i386版本是32位处理器通用的,我用不到,不用看,根据之前的经验,优先找dev或者devel这种开发版本,找到以下两个包:

 
  1. clisp-module-gdbm # clisp模块,为GNU添加接口

  2. libgdbm-dev

2、python3再次编译安装

 
  1. ./configure

  2. make

  3. sudo make install

进行构建测试make test,就剩3个了

 
  1. The necessary bits to build these optional modules were not found:

  2. _bz2                 _dbm                 _lzma

3、测试是否能正常导入dbm gdbm

但是,dbm模块确实已经可以正常导入了

 
  1. `Python 3.6.6

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> import dbm

  5. >>>

因为在python3中,gdbm模块已重命名为dbm.gnu,那么测试导入gdbm

 
  1. Python 3.6.6

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> from dbm import gnu

  5. >>>

都成功导入了,应该是不影响正常使用l,毕竟这时候依赖包最新版本的是针对3.6.5版本,大概是因为这一点差别,所以make test时仍会报错。

 
  1. The necessary bits to build these optional modules were not found:

  2. _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安装到指定目录,方便下一步设置

 
  1. cd ~/software/sqlite-autoconf-3240000

  2.  
  3. ./configure --prefix=/usr/local/sqlite3

  4.  
  5. make

  6.  
  7. sudo make install

4、python3再次编译安装

 
  1. ./configure

  2. make

  3. sudo make install

进行构建测试make test,就剩2个了

 
  1. The necessary bits to build these optional modules were not found:

  2. _dbm _lzma

所以说啊,是否使用apt工具安装,没什么关系OTL

但是啊,虽然在make test中看不到bz2了,在终端尝试导入,依然是不行的

 
  1. Python 3.6.6

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> import bz2

  5. Traceback (most recent call last):

  6. File "<stdin>", line 1, in <module>

  7. File "/usr/local/lib/python3.6/bz2.py", line 23, in <module>

  8. from _bz2 import BZ2Compressor, BZ2Decompressor

  9. ModuleNotFoundError: No module named '_bz2'

  10. >>>

  11.  

但是的但是,这时在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、安装依赖包

 
  1. sudo aptitude install python-lzma

  2.  
  3. sudo aptitude install liblzma-dev

2、进入python3.6.6解压目录,再次进行编译安装

 
  1. cd ~/software/Python3.6.6

  2. ./configure

  3. make

  4. sudo make install

3、测试是否能正常导入lzma

 
  1. Python 3.6.6

  2. [GCC 7.3.0] on linux

  3. Type "help", "copyright", "credits" or "license" for more information.

  4. >>> import lzma

  5. >>>

这次没有报错,可以正常导入

另外,make test显示

 
  1. The necessary bits to build these optional modules were not found:

  2. _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

历史记录

#1 Zaar Hai 更新于 大约 3 年 之前

#2 由 匿名用户 更新于 大约 3 年 之前

  • 状态New 变更为 Resolved
  • % 完成0 变更为 100

Applied in changeset 0944ce49cd73571066d7332f1c07312cc52f50e7.

#3 Zaar Hai 更新于 大约 3 年 之前

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 100

Applied 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.

#5 由 匿名用户 更新于 大约 3 年 之前

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值