Loading

非root用户安装python3.10

最近舍友找我帮忙解决python版本问题,特此记录中间遇到的各种问题。

查看系统版本

这里使用的服务器系统为ubuntu,具体如下

安装依赖

这个应该是遇到的最大问题,缺少root权限,各种依赖都需要自己手动编译安装,并配置环境,较为复杂。

OpenSSL

源码下载地址为https://www.openssl.org/source/,下载源码,然后将其解压。

进入到解压后的文件,因为我们缺少root权限,所以我们需要指定安装位置。然后执行 make && make install 命令

tar -xvf openssl.tar.gz                #解压,将 openssl.tar.gz 换成自己下载的包
cd openssl                             #进入解压后的文件夹,将 openssl 换成解压得到的文件夹
./config --prefix= your_install_path   #设置安装位置,将 your_install_path 换成自己想要安装的位置
make && make install                   #编译安装,如果条件允许可以是用 make -j(后面跟上线程数)

zlib

源码下载地址为http://www.zlib.net/,其余操作类似 OpenSSL

说明:指定安装位置的时候使用 ./configure

libffi

源码下载地址为https://github.com/libffi/libffi/releases,其余操作类似 zlib

说明:指定安装位置的时候使用 ./configure

修改 ~/.bashrc

在 ~/.bashrc 下增加如下内容:

export PATH=$PATH:your_openssl_path

export C_INCLUDE_PATH=$C_INCLUDE_PATH:your_openssl_path/include

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:your_openssl_path/include

export LIBRARY_PATH=$LIBRARY_PATH:your_openssl_path/lib

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:your_openssl_path/lib:your_zlib_path/lib:your_libffi_path/lib

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:your_libffi_path/lib/pkgconfig

说明:上面 your_openssl_path 就是 openssl 安装的位置(这个是上面你自己指定的,不懂往上翻),your_zlib_path 和 your_libffi_path 同理

之后启用这些配置,如果没有报错就说明配置正确

source ~/.bashrc

Python 编译安装

源码下载解压,不再赘述

按照 教程 的说法,需要修改 Modules 目录下的 Setup 文件,但是经过尝试,不需要修改就可以。如果报错可以尝试他的做法

进入到 python 文件夹(刚才解压得到的),执行如下命令

LDFLAGS=`pkg-config --libs-only-L libffi` ./configure --prefix=your_install_path --with-openssl=your_openssl_path --enable-optimizations --enable-loadable-sqlite-extensions

说明:上面的 your_install_path 就是你指定的 python 安装位置,your_open_ssl 不再赘述

sqlite3

通过如上配置之后,python编译安装正常,但是最终使用的时候会发现报错 "no module named _sqlite3" ,这意味着我们依然缺少一些依赖。

源码下载地址为http://www.sqlite.org/,编译安装方式同上面。注意配置安装位置的时候使用 ./configure

然后进入到 Python 安装包(也就是我们下载的压缩包解压后的文件夹,不是python安装位置那个文件夹),修改 setup.py 文件

# 搜索找到 detect_sqlite 函数,在 sqlite_inc_paths 中添加我们自己的 sqlite3

sqlite_inc_paths = [ ...
                     ...
                     'your_sqlite3_path/include',
                     'your_sqlite3_path/include/sqlite3/include',
                   ]

修改完成后,重新执行 Python 编译安装

bzip2

当我们导入 pandas 包后发现报错 ModuleNotFoundError: No module named '_bz2'

xs,我尝试通过编译安装,但是最后不知道出现什么问题失败了。现在尝试另辟蹊径,通过当前现有的文件。

查找是否存在 _bz2*.so,执行命令如下

find / -name '_bz2*.so'

如果能找到类似 '/python/lib/python/lib-dynload/_bz2.so' 这样的文件,恭喜你,你只需要将这个文件复制到自己刚才下载的 python 文件夹对应的位置,'your_python_path/lib/python**/lib-dynload/'

同时我们需要修改这个文件名,你可以查看自己python文件夹下面这个 lib-dynload 文件夹下的文件命名规则,仿照其修改就行。

例如 之前是 python3.6 下的 _bz2.cpython-36m-x86_64-linux-gnu.so,将其复制到 python3.10 下,修改名称为 _bz2.cpython-310-x86_64-linux-gnu.so

如上,我们再次编译安装 python,终于成功了,泪目

posted @ 2023-06-05 17:09  与余  阅读(483)  评论(0)    收藏  举报