deepin系统下python的编译安装以及库加载问题总结

deepin系统下python的编译安装以及库加载问题总结,第1张

deepin系统下python的编译安装以及库加载问题总结 引言

本篇想总结的是最近两天我遇到过的在deepin系统下的一些问题,主要是一些bug以及python编译安装的东西,以防下次还遇到,如果可能(最好不要)。

apt-get无法更新问题

当我刚进入系统后,遇到了如下错误:

Couldn’t create temporary file /tmp/apt.conf.g1YDx9

解决方案,tmp没有权限:

chmod 777 /tmp

我也不知道为什么会遇到这个错误,但是就是那么巧合,所以在这里记录一下。

deepin无法安装docker问题

我不知道是不是所有deepin都是这样,但在我这里,无论我怎么用官网的debian安装方式,都无法安装docker-ce、docker-ce-cli与containerd.io,最后是在GitHub上找到一键脚本方式安装,如下为:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

以及:

curl -sSL https://get.daocloud.io/docker | sh

因为我用的UOS系统,看到它好像是用的deepin做系统,到底中间哪一环出了问题,我也不知道,只能说是一个不明所以的错误。

python环境编译

在centos以及Ubuntu中,一般系统是完整带有相关环境依赖的,如果没有,参照之前我安装centos时的如下方式也能将python环境依赖装好:

# 系统依赖
yum -y install  zlib zlib-devel
yum -y install  gcc gcc-c++
yum -y install openssl openssl-devel
yum -y install libffi-devel  tk-devel

# python 非必要依赖包
yum install xz-devel
yum install python-backports-lzma   # pandas
yum install sqlite-devel
yum -y install readline-devel    # python命令行下退格、删除、方向键乱码问题包

其中openssl与openssl-devel都是与证书相关,python安装会去请求项目依赖,而backports-lzma等就是pandas需要的包了,一般都会有这些包,如果没有,那么就是系统存在问题,比如我在deepin遇到的情况,emmm。。。这里列举出sqlite的编译方式,其它的,关于openssl在我之前博客里编译cmake的时候有提及,但python不需要cmake,同样自带的openssl就多少版本都行,而lzma这个包已经很老了,我看日期是2012年最后几次更新,那么就说明非常稳定了,所以是可以用源安装的,不然我感觉这系统应该会喷惨了。

sqlite编译安装

sqlite如果不进行编译,python支持的底层是无法运行一些各种包的,这就相当于缓存,如果缺少,会对整个文件结构产生影响,具体命令如下:

wget https://www.sqlite.org/2018/sqlite-autoconf-3250200.tar.gz
tar -zxvf sqlite-autoconf-3250200.tar.gz
cd sqlite-autoconf-3250200
./configure --prefix=/usr/local/sqlite3
make && make install

安装完毕,/usr/local/目录下就会有sqlite3了,还需要添加软链接到执行目录:

ln -s /usr/local/sqlite3/bin/sqlite3 /usr/bin/sqlite3   

如果不添加软链,后续python的编译还是找不到sqlite的,之后安装好上面几个包,如果不用命令行的退格、删除、方向键以及pandas数据处理包,上述python依赖包可以不安装。

python源码编译

首先再检查一遍依赖:

apt-get install -y gcc g++ cmake make build-essential zlib1g-dev libbz2-dev libsqlite3-dev libssl-dev libxslt1-dev libffi-dev

其中libsqlite3上述已经进行源码编译,因为我没在deepin系统上加载进这个包,所以我将它从apt-get install里删除了。

然后安装python:

wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
tar -zxvf Python-3.7.5.tgz

cd Python-3.7.5/
./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared
# ./configure --prefix=/usr/local/python37 --enable-optimizations && make && make install

make
sudo make install

这里有两种编译python的方式,一种是enable-optimizations全量编译,即将整个python所有环境进行构建,我尝试了下,除了等了半小时才编译c文件到 307/471然后卡住了,根据资料似乎这个选项是对整个python进行优化,编译后,性能有 10% 左右的优化。但暂时还用不到,所以建议第一种,因为apt-get install python3-devel的下载预编译版本也是第一种加sqlite-extensions扩展,与enable-shared启用内置库共享。

然后添加python软链:

sudo ln -s /usr/local/python3.7.5/bin/python3 /usr/local/python3.7.5/bin/python3.7.5
sudo ln -s /usr/local/python3.7.5/bin/pip3 /usr/local/python3.7.5/bin/pip3.7.5

设置python3.7.5环境变量:

#用于设置python3.7.5库文件路径
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#如果用户环境存在多个python3版本,则指定使用python3.7.5版本
export PATH=/usr/local/python3.7.5/bin:$PATH
importError: libpython3.7m.so.1.0: cannot open shared object file: No such file or direct

这个报错同样很匪夷所思,因为我上面已经将python3.7.5下的lib加入进系统变量,但是这里报错说找不到,然而这个文件就是lib下的,于是对这单个文件做了特殊处理:

解决方案:

cp libpython3.7m.so.1.0 /usr/local/lib/
cp libpython3.7m.so.1.0 /usr/lib/

上面这两个路径一般为linux默认的可共享的动态链接库,同bashrc中的系统变量一样,Linux会默认加载的路径。

除了上面这种直接cp拷过去的方式,还有建立软链接,以及修改/etc/ld.so.conf,再创建一个新的动态库路径,一般这两个是不常用的,然而谁让我现在在采坑呢,除了软链接没有试过,/etc/ld.so.conf方式见下图,因为不知道什么原因,加载不了的动态库太多了,只能开更多新的路径:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存