非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,终于成功了,泪目


浙公网安备 33010602011771号