• 【Linux】Ubuntu16.04配置repo


    Ubuntu16.04配置repo失败


    在学习韦东山Linux嵌入式开发过程中,使用repo获取内核及工具链:
    git clone https://e.coding.net/codebug8/repo.git
    
    mkdir -p 100ask_imx6ull-sdk && cd 100ask_imx6ull-sdk
    
    ../repo/repo init -u https://gitee.com/weidongshan/manifests.git -b linux-sdk -m imx6ull/100ask_imx6ull_linux4.9.88_release.xml --no-repo-verify
    
    ../repo/repo sync -j4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果失败,错误提示:

    repo: warning: Python 2 is no longer supported; Please upgrade to Python 3.6+.
    
    No module named requests
    
    • 1
    • 2
    • 3

    找到repo文件夹,打开repo文件,我的repo文件夹在家目录:

    vim ~/repo/repo
    
    • 1
    def check_python_version():
      """Make sure the active Python version is recent enough."""
      def reexec(prog):
        exec_command([prog] + sys.argv)
     
      MIN_PYTHON_VERSION = (3, 6)
     
      ver = sys.version_info
      major = ver.major
      minor = ver.minor
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    原因分析:

    Ubuntu16系统自带python2.7和python3.5,默认的python版本是python2.7,且没有装requests。而repo init时指定的repo仓库里的脚本需要python3.6版本解释器,那在repo init运行的时候肯定会出问题。

    python --version   #查看python默认版本
    
    python2 --version   #查看python2安装版本
    
    python3 --version   #查看python3安装版本
    
    python3.5 --version   #查看python3.5安装版本
    
    python3.8 --version   #查看python3.8安装版本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    记住这里用 pip install requests 也并没有什么用,因为ubuntu16.04 默认的python版本就是 python2.7 和 python3.5,pip还是会将包安装到默认的python版本下,导致出现问题。


    请注意,根据别人的血泪经验,系统自带的python千万不能卸载!正确做法,安装高版本的python,这里我选择直接安装python3.8。 参考链接:

    ubuntu下repo遇到的环境问题




    Ubuntu16.04下完美安装python高版本及对应版本的pip


    方法一:直接用命令安装python3.6(但我没安装成功)

    好像是因为Ubuntu16.04的软件仓库(源)中python的最高版本就是python3.5,所以无法直接用apt来安装

    #方法一
    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt-get update
    sudo apt-get install python3.6
    #方法二
    sudo add-apt-repository ppa:jonathonf/python-3.6
    sudo apt-get update
    sudo apt-get install python3.6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    参考链接:
    ubuntu16.04,卸载系统自带的python3.5引发了一宗惨案,好在最终完美解决

    Ubuntu16.04下完美安装python3.6.x(以3.6.9为例)及对应版本的pip


    方法二:用源码安装,这里装python3.8.11
     wget https://www.python.org/ftp/python/3.8.11/Python-3.8.11.tgz
    
    • 1
    #解压,用xfz命令,不推荐用-zxvf 权限问题,不深究
    tar xfz Python-3.8.11.tgz
    cd Python-3.8.11
    ./configure --with-ssl
    make
    sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意:python3.8.11会自动安装到/usr/local/bin下,你可以用update-alternatives来控制python版本,好用!

    在python3.6安装好后,你还需要安装对应版本的pip。可以采用如下指令查看python版本对应的pip有没有安装

    pip -V
    
    pip2 -V
    pip3 -V
    pip3.8 -V
    pip3.5 -V
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果安装了:

    pip 21.1.1 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)
    
    • 1

    如果没有安装,可以采用如下指令。不行的话,就百度查查,不难。

    sudo apt-get install python3-pip #装pip3
    
    • 1

    或者

    sudo apt install -y python3-pip
    
    • 1

    这是一个Linux命令,它的作用是安装Python 3的包管理工具pip。其中,sudo是Linux中的一个命令,用于以超级管理员身份来执行某个命令。apt是Ubuntu和Debian等Linux发行版中用于管理软件包的工具。install是apt的一个子命令,用于安装软件包。-y参数表示在安装时不需要人工确认。在这里,我们通过使用apt来安装Python 3的包管理工具pip,以便在之后使用pip来安装Python包。

    apt 和 apt-get功能差不多。在专业人士看来,选择apt 是值得的,因为它提供了软件包管理的所有必需功能,并且更快,更友好且易于使用。




    使用 update-alternatives设置python优先级


    update-alternatives 本质上就是管理软链接,但提供了更规范安全的操作接口。这里只是为了建一个简单的版本管理,只需要用到一两个指令,其他功能不予深究。 首先,看一下是不是已经配置过了:
    sudo update-alternatives --config python
    
    • 1

    以上指令中,sudo 是因为涉及到配置 /usr/bin 下的软链接,需要 sudo 权限;
    –config 后跟所谓的服务名,此处即 python,也就是你配置的这一套版本管理的指代名称

    如果显示“无候选项”,或者不完善,说明在“python”的这个版本系列里,你还没有设置优先级。

    优先级示例设置:

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 2
    
    • 1

    以上指令中,
    /usr/bin/python 是要创建的软链接的名字,是几个版本共用的;
    后面的 python 即服务名,添加的版本会加入到名叫“python”的这个版本系列里,如果之前不存在(“无候选项”)则创建;
    接下来的 /usr/bin/python2 就是软件的实际位置
    最后的数字是优先级,后续可以选择自动模式和手动模式,自动模式下就会自动选择优先级值最大的一个版本。


    注意,我的python3.8.11会被安装到/usr/local/bin下,因此正确做法如下:

    调整Python3的优先级,使得3.8优先级较高

    sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1 
    
    sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.8 2
    
    • 1
    • 2
    • 3

    现在系统python默认为Python2,需要修改为Python3

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 
    
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
    
    • 1
    • 2
    • 3

    结果查询:

    在这里插入图片描述

    在这里插入图片描述




    移除链接,

    sudo update-alternatives --remove name path
    
    • 1

    这里我们移除python3里的python3.8:

    sudo update-alternatives --remove python3 /usr/local/bin/python3.8
    
    • 1

    参考链接:
    ubuntu16.04安装python3
    Linux命令之update-alternatives




    subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1


    原因:python路径下缺少 'lsb_release.py' 模块。

    在这里插入图片描述


    解决方案:

    1、查找到lsb_release模块所在的目录
    sudo find / -name 'lsb_release.py'
     
    2、将其复制到设置python3.8的系统模块加载位置,也就是报错处subprocess.py所在的目录
    sudo cp  /usr/lib/python3/dist-packages/lsb_release.py /usr/local/python/lib/python3.8/
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述


    注意,我这里根据自己的路径调整为:

    sudo cp  /usr/lib/python3/dist-packages/lsb_release.py /usr/local/lib/python3.8/
    
    • 1

    参考链接:

    subprocess.CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘ returned non-zero exit status 1




    解决python urllib3 v2.0 only supports OpenSSL 1.1.1+, currently


    卸载
    pip3 uninstall urllib3
    
    • 1

    重新安装

    pip install urllib3==1.23 -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    • 1

    还是不行尝试 升级openssl




    配置交叉编译工具链时的问题

    export ARCH=arm
    export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
    export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
    
    • 1
    • 2
    • 3

    注意直接这样写是错的,要把book换成自己的用户名:

    export ARCH=arm
    export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
    export PATH=$PATH:/home/yugong/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
    
    • 1
    • 2
    • 3




  • 相关阅读:
    179. 最大数
    web前端网页设计期末课程大作业:旅游网页主题网站设计——三亚旅游网页设计(6个页面) HTML+CSS+JavaScript
    剑指offer 71. 股票的最大利润
    Jmetersphere性能压测执行过程
    java.lang.OutOfMemoryError- unable to create new native thread 问题排查
    百度AI给出MFC使用进度条的例子
    火灾隐患是查不完的,消防监管要着力于提升单位消防能力
    特斯拉“断网”,数百车主“被锁车外”,马斯克道歉
    Unity入门02——Unity工作原理
    竞赛 深度学习YOLO安检管制物品识别与检测 - python opencv
  • 原文地址:https://blog.csdn.net/zsyyugong/article/details/134402099