• 源码安装python


    前端时间,在debian10的机器上要使用比较新的版本的python,因此需要自己手动去编译一个。python用的少,这次做了,就记录一下,以后再用,可以回头看看。

    1. 在编译之前,最好安装好libffi-dev,比如需要使用pyinstaller时,如果没有安装这个东西,就会报错,No module named '_ctypes',到时候就需要重新编译,费事。因此在动手之前,先安装上。

    2. 下载tar.xz的源码,tar -xf解压缩后,进入文件夹执行:

    ./configure --prefix=/usr/local/bin/python3.8.2/ --with-openssl=/usr/local/openssl/ --enable-shared

    --prefix是安装目录

    --enable-shared是编译后,会生成python的库。如果需要使用pyinstall来编译可执行程序,那么需要带上这个选项。编译好后,make Install。但是发现,没有将生成的libpython*.so放到系统常见的路径下,比如/lib/x86_64-linux-gnu/,而且因为这个导致python无法运行。在命令行调用python3 --version,就会报错,说找不到libpython3.8.so.1.0。所以,在编译完后,手动将libpython3.8.so.1.0拷贝到/lib/x86_64-linux-gnu/下。然后再运行python3 --version就没有问题了。

    --with-openssl=/usr/local/openssl/ 这个是让编译生成的python支持ssl。务必带上这个,不然后面使用编译后的pip去下载包的时候,如果是公网,比如清华的,那就必须得支持ssl。另外/usr/local/openssl是ssl所在的路径。这个路径下包括bin(里面有openssl),还有lib(里面有libcrypto.so和libssl.so),编译的过程中会链接lib下的库。如果没有openssl,那么下载openssl的包,解压缩后:

    ./config --prefix=/usr/local/openssl

    make

    make install

    这里--prefix后面的就是make install时openssl的安装目录。注意make install时权限问题,像上面安装到/usr/local/openssl下,需要root权限。

    对了,除了添加 --with-openssl=/usr/local/openssl/ ,还需要修改在python源码下Modules文件夹下Setup文件,修改内容:

    就是修改SSL,SSL=,“=”右边的是openssl所在的路径

    在python源代码文件夹下做完./configure后,执行make & make install.

    这里建议make之前做一下make clean。因为如果曾经做过make,不带ssl,现在这里带上ssl,不clean直接make,还是会报错,未定义的openssl的一些函数。后来make clean后,再make,就没有问题。

    创建快捷方式:

    ln -s /usr/local/bin/python3.8.2/bin/python3 /usr/bin/python3

    ln -s /usr/local/bin/python3.8.2/bin/pip3 /usr/bin/pip

    pip批量安装:

    pip install -r requirements.txt

    如果pip install报错,pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

    原因就是python不支持openssl,需要重新编译python,带上openssl。

    pip install时报错,ERROR: Can not execute `setup.py` since setuptools is not available 

    这种情况下,需要安装setuptools,如下:

    pip3 install --upgrade setuptools

  • 相关阅读:
    基于ssm的医院住院病房管理系统
    农村经济与科技杂志农村经济与科技杂志社农村经济与科技编辑部2022年第13期目录
    QT+OSG/osgEarth编译之四十:osg+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5核心库osg)
    Spring IOC容器与 Bean 管理 第3关:Bean 标签中的 scope 属性
    SAP UI5 SmartTable 控件本地运行时进行 Excel 导出的单步调试
    Oracle 踩坑记录
    2023-09-05 LeetCode每日一题(从两个数字数组里生成最小数字)
    并发编程十 定时任务&定时线程池
    安化云台山又添一新的打卡点——星空露营公园
    程序员的实用神器之——通义灵码
  • 原文地址:https://blog.csdn.net/guolisong/article/details/126071208