本篇想总结的是最近两天我遇到过的在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:$PATHimportError: 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方式见下图,因为不知道什么原因,加载不了的动态库太多了,只能开更多新的路径:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)