精华内容
下载资源
问答
  • 安装 Python 软件包遇错误,怎么办?

    千次阅读 2018-10-09 11:00:41
    本文通过一个命令行转换 pdf 为词云的例子,给你讲讲 Python 软件包安装遇挫折时,怎么处理才更高效?遭遇前两天,有位读者留言求助。起因是他读我的《如何用Pytho...
    640?wx_fmt=jpeg

    本文通过一个命令行转换 pdf 为词云的例子,给你讲讲 Python 软件包安装遇挫折时,怎么处理才更高效?

    遭遇

    前两天,有位读者留言求助。

    起因是他读我的《如何用Python做词云?》一文。按照样例成功做出词云后,觉得很兴奋。不过,他不满足于照猫画虎做出结果,找到了 wordcloud 的 github 页面,查看附加功能。

    640?wx_fmt=jpeg

    对这一点,我是非常赞赏的。因为这种按图索骥,很多时候,都能有意外收获和惊喜。

    例如你偶然读到一篇好文章,于是找到该作者的专栏或者公众号,很大概率就可以读到更多高品质的文章。当年我就是用这种方法,读到阳志平先生和万维钢先生的系列文章,收获颇丰。

    同样,一个软件提供了一项你喜欢的功能,你找到它的网站,可能会找到其他感兴趣的功能。甚至有时候,还能发现同一作者的更多优秀工具。

    果不其然,这位读者,就找到了一个令自己很兴奋的功能。下图中,我用红线给你标出了这个功能。

    640?wx_fmt=png

    对,wordcloud 不仅可以在 Python 代码中作为模块引入,帮你分析文本,绘制词云;它还可以在命令行方式下,从 pdf 里面直接提取词云出来。

    就像这个样子:

    640?wx_fmt=png

    我估计,他喜欢这个功能,或许是因为最近读 pdf 格式的论文太多了,想偷个懒吧。

    这个操作,只需要终端下面的一行命令。连简单的 Python 编程,都不需要。

    他于是兴奋起来,立刻开始尝试这个功能。

    然而,这句命令一执行,就报错。提示他的系统里面,没有 pdftotext 。

    他于是想,既然 wordcloud ,是需要 pip 命令安装的,那么这个 pdftotext ,看来也需要 pip 安装,对不对?

    他尝试执行:

    pip install pdftotext

    pip 确实找到了这个名称的软件包,开始安装。他瞬间成就感爆棚。

    但是,一盆冷水,很快就被泼了下来。

    无论如何反复试验,用 pip 安装 pdftotext 这个软件包,总是报错。

    640?wx_fmt=jpeg

    他没有气馁,还专门用搜索引擎查了网上的资料。对于技术问答社区里,类似问题下面提及的每一种可能办法,他都做了尝试。

    结果,也无非是报错的提示稍微有了区别,但是问题依旧。

    640?wx_fmt=jpeg

    他无计可施了,于是来问我怎么办。

    分析

    其实,他不该有挫败感。遭遇软件安装困难的时候,能走到他这一步,已经难能可贵。

    许多初学者,接触 Python 编程或者命令行操作,往往在自学时,会直接倒在第 0 步,也就是软件安装与环境设置上,直接放弃了。

    这位读者求助的,是遇到上图所示的报错时,应该怎么样对应操作,才能让错误消失

    我很愿意帮助他,但不是这个帮法。

    因为他从网上找来的这些方法,都没能解决问题。不仅如此,许多操作可能会改变系统环境(例如安装了不同版本的依赖包,或者编译工具等)。这些操作,可能致使现在想回到问题的初始状态,都回不去了。

    同一个报错,背后可能有若干种原因。这就是为什么你电脑坏了,往往无法通过电话或者网上技术支持来解决,得需要现场处理,才能让维修人员充分掌握具体情况,做出正确的处理。

    当然,报错搞不定,并不意味着问题无法有效解决。

    还记得我那篇《什么是第一性原理?》吗?我开门见山地告诉你,应该尝试:

    将事情缩减至其根本实质。

    你的目的,不应该是跟报错信息较劲,而应该弄明白,到底出了什么问题。

    出问题的包,是 pdftotext 对吧?

    那你试试,在 github 上搜索一下,它对应的 repo 页面。

    你很容易就找到这个网址。

    640?wx_fmt=jpeg

    下面请你下拉页面,看跟安装相关的部分。如下图所示:

    640?wx_fmt=jpeg

    注意,在安装(Install)一部分,操作非常简单,只需要一条 pip 命令就好。

    pip install pdftotext

    跟你刚刚的操作,一模一样,对吧?

    那怎么会出错呢?

    请你往上看。

    这里有个“系统依赖”(OS Dependencies)部分。它用了比安装命令多出数倍的篇幅,告诉你在不同的操作系统上,需要安装的依赖包。

    如果你之前尝试过我的那篇《贷还是不贷:如何用Python和机器学习帮你决策?》教程,应该记得,你遇到过类似问题。

    [图片上传失败…(image-902468-1539052087951)]

    对,就是最后步骤,尝试绘制这幅决策树可视化图的时候,也遭遇到报错。

    错误出现的原因,我已经在《Python编程遇问题,文科生怎么办?》一文中为你详细解释过了。就是因为不少 Python 包,实际上是包裹了其他软件、甚至是系统级别的功能,方便你使用。要正常安装使用这种 Python 包,你首先需要确保系统拥有这些功能,或者已经安装了相应的软件。这就叫做依赖(Dependencies)。

    好了,问题找到了。因为这位读者,没有安装对应的依赖。

    所以,他虽然下了很大功夫,搜索问题病症和解决方案,但是都是从具体的报错信息出发的。因此一直跟 gcc 、头文件这些编译相关的内容较劲儿。找到的解决方案,其实跟遇到的问题,并不匹配。他其实本不需要见识各种各样的报错信息,而只需要把相应的依赖软件安装就好了。

    这位读者,用的是 macOS 。

    回顾一下官网给出的依赖要求:

    640?wx_fmt=jpeg

    那么,他需要执行:

    brew install pkg-config poppler

    写到这里,似乎应该是个大团圆的结局了。对吧?

    未必。

    因为他非常可能,立即会遇到新的报错。

    新问题

    怎么又报错了?!

    因为 brew 命令,属于 Homebrew 套件,它不是 macOS 系统里自带的工具。

    好吧,他可以去搜索引擎查找 brew 是怎么回事儿,继而到 Homebrew 的官网成功下载,然后学习如何安装……

    最终,估计他可以走到正确的路径上来了。

    你可以替他高兴,但是我们不要过早欢呼。

    因为这种解决方案,其实只是个例,不具备可推广性。

    更多人用的操作系统,是 Windows 对不对?

    回过头来看看,刚才的系统依赖清单里面,有 Windows 吗?

    640?wx_fmt=jpeg

    没有。

    是不是因为作者忘了写?

    又或者,是不是因为 Windows 本身已经有了相关软件集成,无须安装?

    都不是。

    现实是残酷的。

    打开 pdftotext 官方 github 页面的答疑记录来看, Windows 干脆就无法像 Linux 或者 macOS 一样,一行命令安装好依赖。

    640?wx_fmt=jpeg

    软件作者给你指出的方向,居然是安装 Visual Studio 这样的编译器,然后自己编译出来。

    对于文科生来说,这不厚道啊!

    ……

    你别急着放弃啊!我还没说完呢。

    曲径

    遇到问题,不要第一时间只想到“放弃”这种方法。

    虽然学会止损很重要。但是如果因为有困难,就放弃解决问题,那就背离初衷了。

    倘若人类的祖先都这样处理问题,今天我们或许都在树上呆着,跟大自然“和谐相处”呢。

    但那恐怕只是我们的美好幻想——更大的可能性,是我们这个物种早就灭绝了。

    面对新的问题,请你再度拿出“第一性原理”的思考方式。

    注意我们的问题已经从“如何应对报错信息”,转换到了“如何正确安装 pdftotext ”软件包。

    但是如果你在 Windows 平台,似乎这个软件包跟你缘分不是很密切。

    怎么办?

    我们再思考一步,真的必须要安装 pdftotext 这款软件包吗?

    这样一问,答案呼之欲出:不一定啊!

    许多功能,都有不同的软件包可以做到。

    之前的教程里,你已经看到了许多的例子。

    例如绘图,你既可以用 matplotlib ,也可以用 plotnine ;

    中文分词,你既可以用 boson NLP,也可以用结巴分词;

    深度学习,你既可以用 tflearn ,也可以用 Keras,还可以用 TuriCreate。

    这里,重新给你回放一下 wordcloud 官方 github repo 上面的那行示例语句:

    pdftotext mydocument.pdf - | wordcloud_cli --imagefile wordcloud.png

    思考一下,使用 pdftotext 这个软件包,用来做什么?

    对,是用来把 pdf 文件,变成文本。

    有了文本,喂给 wordcloud 工具,它就能做成词云。

    我们需要的,根本就不是正确安装 pdftotext ,而是找到一个工具,把 pdf 给我们转换成为文本。

    好了,“把 pdf 转换成为文本”让你想到了什么?

    如果你没有想到我给你写过的《如何用Python批量提取PDF文本内容?》,那就需要“学而时习之”了。

    文中,我给你介绍过一款可以完成上述功能的 Python 软件包,叫做 pdfminer.six

    当时,我们采用的方法,是 Python 编程,调用 pdfminer.six 软件包作为模块载入。

    现在我们需要看看,它是否也支持命令行直接操作。

    这里是它的 github 页面。

    640?wx_fmt=jpeg

    下拉页面,可以看到专门有一个部分,给你介绍如何使用 pdfminer.six 命令行完成文本提取功能。

    640?wx_fmt=jpeg

    好了,我们的猜想被证实了。它完全可用。

    另外请注意, pdfminer.six 的安装说明里,根本就没有提到操作系统依赖。

    640?wx_fmt=jpeg

    这就意味着,不管你用的是 Windows、Linux,还是 macOS ,都可以在不必安装依赖软件的情况下,直接用 pip 工具安装 pdfminer.six

    步骤

    下面我们来看看,如何用下面的简单步骤,实现我们的目的——直接用命令行而非编程方式,从 pdf 文件,分析并绘制词云。

    先确保你的系统里面 python 3 已经安装。如需全新安装,请参考这个视频教程

    然后,用 pip 命令安装 wordcloud 软件包:

    pip install wordcloud

    注意如果你在安装过程中遇到问题,请参考我的另一份视频教程

    之后,执行下述语句,安装 pdfminer.six

    pip install pdfminer.six

    你可以自己新建一个测试目录,拷贝进入一个 pdf 文件。

    或者,你也可以直接下载这个压缩文件,解压后有一个现成的 pdf 文件。后文还有对应生成词云结果,供你测试和对比。

    我们打开这个样例 pdf 文件(名称为 test.pdf ),看看内容:

    640?wx_fmt=jpeg

    之后在终端下进入该测试目录(方法依然参考这个视频教程),执行:

    pdf2txt.py test.pdf | wordcloud_cli --imagefile wordcloud.png

    对比一下,我们只是把原先 wordcloud 官方页面上的命令:

    pdftotext mydocument.pdf - | wordcloud_cli --imagefile wordcloud.png

    前半部分进行了替换,使用了 pdfminer.six 软件包。

    转瞬间,wordcloud.png 这个图像文件就在当前目录下生成了。打开看看:

    640?wx_fmt=png

    没毛病,对吧?

    小结

    如你所见,完成从 pdf 提取词云这个功能,原本只需要上面一个小节里,几行命令而已。即便你从 Anaconda 开始全新安装,所需的时间也远远不到一个小时。

    但是,就像这位提问的读者一样,如果你遭遇到了安装中的错误提示,然后跟错误提示展开各种斗争,并且最终无功而返。那耽误的时间,可能远远不止一个小时。

    你可能会辩驳,说自己从这个折腾的过程中,也学到了东西。没错,你会学到如何采用 Homebrew 来安装 macOS 上的软件,了解 gcc 这款开源编译工具的使用方法,甚至是如何在 Windows 上面编译源代码……但是获得这些经验,你付出了过高的代价。你的机会成本,是原本可以用这几个小时好好读一两篇高水平论文,甚至是写作自己的工作报告或者论文初稿。

    用这时间,通过不断折腾来尝试解决问题,还远不是最糟糕的结果。对很多初学者来说,这种长时间反复的挫折,会严重打击你尝试新软件、新功能的信心和兴趣,甚至干脆放弃了探索的欲望。这对你的损害就太大了。

    希望读过本文,你收获的远不仅仅是“如何从 pdf 提取词云”这种简单的技巧,而是在生活、学习和工作中,充分运用第一性原理思维工具,把自己从纷繁复杂的表象里面抽身出来,扩大格局和视野,关注更本质的需求,做出明智而高效的选择。

    最后给你留一道思考题:

    本文给你展示的,是从 pdf 提取词云的最好方法吗?

    欢迎你把自己的思考结果,留言告诉我,也分享给其他人。

    喜欢请点赞和打赏。还可以微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。

    如果你对 Python 与数据科学感兴趣,不妨阅读我的系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。

    由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮,访问可以正常显示外链的版本。

    我的知识星球入口在这里:

    640?wx_fmt=jpeg


    展开全文
  • Ubuntu sudo apt-get update sudo apt-get -f install sudo apt-get install ...安装aptitude管理软件 sudo apt-get install aptitude # 安装 aptitude的一些常用的操作: sudo aptitude update # 更新软件源 sudo apt

    Ubuntu安装软件包

    apt 安装

    sudo apt search package #搜索包 
    sudo apt show package #获取包的相关信息,如说明、大小、版本等  
    sudo apt depends package #了解使用依赖  
    sudo apt rdepends package #查看该包被哪些包依赖  
    sudo apt-cache pkgnames  #执行pkgnames子命令列出当前所有可用的软件包 
    sudo apt policy package #使用policy命令显示软件包的安装状态和版本信息。
    sudo apt install package #安装包  
    sudo apt install package=version #安装指定版本的包  
    sudo apt install package --reinstall #重新安装包  
    sudo apt -f install #修复安装, "-f = --fix-missing"  
    sudo apt remove package #删除包
    sudo apt purge package  #删除包,包括删除配置文件等
    sudo apt autoremove #自动卸载所有未使用的软件包
    sudo apt source package #下载该包的源代码   
    sudo apt update #更新apt软件源信息  
    sudo apt upgrade #更新已安装的包
    sudo apt full-upgrade #在升级软件包时自动处理依赖关系  
    sudo apt dist-upgrade #升级系统  
    sudo apt dselect-upgrade #使用dselect升级  
    sudo apt build-dep package #安装相关的编译环境  
    sudo apt clean && sudo apt autoclean #清理无用的包
    sudo apt clean  #清理已下载的软件包,实际上是清楚/var/cache/apt/archives目录中的软件包
    sudo apt autoclean  #删除已经卸载的软件包备份  
    sudo apt-get check #检查是否有损坏的依赖 
    

    apt和apt-get的区别:
    随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-get。
    详情请跳转至:apt 和 apt-get的区别(建议使用apt)

    aptitude安装

    sudo apt install aptitude # 安装

    sudo aptitude update     更新可用的包列表
    sudo aptitude upgrade    升级可用的包
    sudo aptitude dist-upgrade   将系统升级到新的发行版
    sudo aptitude install pkgname    安装包
    sudo aptitude remove pkgname     删除包
    sudo aptitude purge pkgname  删除包及其配置文件
    sudo aptitude search string  搜索包
    sudo aptitude show pkgname   显示包的详细信息
    sudo aptitude clean  删除下载的包文件
    sudo aptitude autoclean  仅删除过期的包文件
    

    使用Deb包安装

    sudo dpkg -i <package.deb>    #安装包
    sudo dpkg -r <package.deb>   #删除包
    sudo dpkg -p <package.deb>   #彻底删除包(包括配置文件)
    dpkg -l                       #列出当前已安装的包
    

    镜像源

    阿里云

    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    

    清华大学开源软件镜像站

    #默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    # 预发布软件源,不建议启用
    # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    

    中科大源

    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    

    网易

    deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
    

    Ubuntu apt-get命令安装软件包时遇到的问题

    Question1

    root@soft3-94:~# apt-get install libssl-dev
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    You might want to run ‘apt-get -f install’ to correct these:
    The following packages have unmet dependencies:
    activity-log-manager : Depends: libglib2.0-0 (>= 2.43.2) but 2.40.0-2 is to be installed
    alsa-base : Depends: kmod (>= 17-1)
    libssl-dev : Depends: libssl1.1 (= 1.1.1-1ubuntu2.1~18.04.6) but it is not going to be installed
    E: Unmet dependencies. Try ‘apt-get -f install’ with no packages (or specify a solution).

    Question2

    root@soft3-94:/var/lib/dpkg# apt-get install update
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    E: Unable to locate package update
    root@soft3-94:/var/lib/dpkg# apt-get install libssl-dev
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    You might want to run ‘apt-get -f install’ to correct these:
    The following packages have unmet dependencies:
    activity-log-manager : Depends: libglib2.0-0 (>= 2.43.2) but 2.40.0-2 is to be installed
    alsa-base : Depends: kmod (>= 17-1)
    libssl-dev : Depends: libssl1.1 (= 1.1.1-1ubuntu2.1~18.04.6) but it is not going to be installed
    E: Unmet dependencies. Try ‘apt-get -f install’ with no packages (or specify a solution).

    Question3

    root@soft3-94:/var/lib/dpkg# apt-get -f install
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    Correcting dependencies… Done
    The following extra packages will be installed:
    kmod libglib2.0-0 libglib2.0-bin libkmod2
    The following packages will be upgraded:
    kmod libglib2.0-0 libglib2.0-bin libkmod2
    4 upgraded, 0 newly installed, 0 to remove and 1422 not upgraded.
    3 not fully installed or removed.
    Need to get 0 B/1368 kB of archives.
    After this operation, 2181 kB disk space will be freed.
    Do you want to continue? [Y/n] y
    perl: warning: Setting locale failed.
    perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_PAPER = “zh_CN.UTF-8”,
    LC_ADDRESS = “zh_CN.UTF-8”,
    LC_MONETARY = “zh_CN.UTF-8”,
    LC_NUMERIC = “zh_CN.UTF-8”,
    LC_TELEPHONE = “zh_CN.UTF-8”,
    LC_IDENTIFICATION = “zh_CN.UTF-8”,
    LC_MEASUREMENT = “zh_CN.UTF-8”,
    LC_TIME = “zh_CN.UTF-8”,
    LC_NAME = “zh_CN.UTF-8”,
    LANG = “en_US.UTF-8”
    are supported and installed on your system.
    perl: warning: Falling back to the standard locale (“C”).
    locale: Cannot set LC_ALL to default locale: No such file or directory
    dpkg-deb: error: archive ‘/var/cache/apt/archives/libkmod2_24-1ubuntu3.4_amd64.deb’ has premature member ‘control.tar.xz’ before ‘control.tar.gz’, giving up
    dpkg: error processing archive /var/cache/apt/archives/libkmod2_24-1ubuntu3.4_amd64.deb (–unpack):
    subprocess dpkg-deb --control returned error exit status 2
    E: Sub-process /usr/bin/dpkg returned an error code (1)

    E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

    解决方案

    各种依赖导致的安装失败,这个可能就是源的问题,替换镜像源链接即可。
    解决方案:
    (1)备份原镜像源文件:mv /etc/apt/sources.list /etc/apt/sources.list.bak;
    (2)创建编辑/etc/apt/sources.list新文件: sudo vim /etc/apt/sources.list ;
    (3)选择上面任一镜像源地址粘贴,保存退出;
    (4)修改后使用sudo apt-get update更新缓存,sudo apt-get upgrade升级包。如果有报错的及时删除后再更新就行了。

    展开全文
  • 由于树莓派的系统 raspbain 自带的 ROS 软件包与正常的 Ubuntu 系统不同且数量不全,所以需要使用 rosdep 工具下载源代码进行编译和安装,而 rosdep 需要访问的网址 https://raw.githubusercontent.com 被GFW,基本...

    前言

    由于树莓派的系统 raspbain 自带的 ROS 软件包与正常的 Ubuntu 系统不同且数量不全,所以需要使用 rosdep 工具下载源代码进行编译和安装,而 rosdep 需要访问的网址被由于众所周知的原因,基本无法直接连接或速度极慢,所以一开始需要在树莓派上配置网络重定向(由于不是完全断连,所以有时通过手机热点或在某些地区也许可以勉强连接,可以自行测试后再确定是否需要)

    该方法同样适用于其他arm硬件系统
    rosdep的问题基本全是由网络不通顺造成的,自己想办法过代理就好

    更早的工作

    1. 更换系统 apt 软件源到国内软件源

    2. 更换 pythonpip 工具软件源到国内软件源

    3. 配置wifi连接

    4. 通过 raspi-config 设置开启VNC、开机加载桌面

    5. 拔掉显示器接口后,再次启动使用VNC连接,通过 raspi-config 设置屏幕分辨率

      如果使用的是树莓派4,需要在sd的配置 config 文件中注释掉,否则无法变更在不插HDMI接口的情况下改变VNC屏幕分辨率

      [pi4]
      # Enable DRM VC4 V3D driver on top of the dispmanx display stack
      #dtoverlay=vc4-fkms-v3d
      #max_framebuffers=2
      
    6. 通过 raspi-config 配置树莓派启用硬件串口,用于rosserial 连接

    重定向网络

    • 省略部分敏感内容

    • 配置 proxychains

      修改/etc/proxychains.conf 的最后一行修改为本地监听端口 (该软件需要和代理软件配合使用,即上方省略内容)

      socks5 127.0.0.1 1080
      
    • 测试

      在终端运行指令,测试 proxychains4 是否能够转发 wget 的流量获取网页的源代码:

      $ proxychains4 wget -qO- https://raw.githubusercontent.com
      

    安装ROS Melodic

    **步骤1:**设置存储库

    $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    
    $ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
    

    此处将 http://packages.ros.org/ros/ubuntu 替换为国内中科大镜像源或其他源以加快速度

    $ sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    
    $ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
    

    更新软件源列表和软件:

    $ sudo apt-get update
    $ sudo apt-get upgrade
    

    **步骤2:**安装构建工具(编译器,CMake等)

    • rosdep是用于安装系统依赖项的命令行工具。
    • rosinstall_generator生成rosinstall文件,其中包含有关带有ROS软件包/堆栈的存储库的信息。
    • wstool是用于维护来自多个版本控制系统的项目工作区的工具。
    $ sudo apt-get update
    $ sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake
    

    **步骤3:**初始化 rosdep

    rosdep 是用来处理软件包依赖规则的工具(此处就需要proxychains4来进行代理了):

    $ sudo proxychains4 rosdep init
    $ proxychains4 rosdep update
    

    **步骤4:**创建一个catkin工作区以构建核心程序包

    在此步骤中创建的工作区可以在完成安装后删除,其本质就是在catkin空间内下载了全部ros软件包后编译并安装,和普通的下载源码编译安装一个ros软件包的原理是一样的:

    $ mkdir ~/ros_catkin_ws
    $ cd ~/ros_catkin_ws
    

    **步骤5:**获取核心软件包

    对于Raspberry Pi,最小的桌面版安装可能是首选,因为该板大概率是在机器人上运行。所以此安装不包括2D / 3D模拟器,导航和2D / 3D感知。可以根据核心数量修改 -j后的数字,以加快多线程的工作:

    $ proxychains4 rosinstall_generator desktop --rosdistro melodic --deps --wet-only --tar > melodic-desktop-wet.rosinstall
    $ proxychains4 wstool init -j4 src melodic-desktop-wet.rosinstall
    

    如果在 wstool init 失败或被中断后,可以通过以下指令恢复:

    $ proxychains4 wstool update -j4 -t src
    

    **步骤6:**安装兼容版本的Assimp (Open Asset Import Library)来修复 rviz 的collada_urdf依赖问题和OGRE。(根据ROS官网描述,此步骤似乎可以省略)

    $ cd ~
    $ mkdir -p ~/ros_catkin_ws/external_src
    $ cd ~/ros_catkin_ws/external_src
    $ proxychains4 wget https://sourceforge.net/projects/assimp/files/assimp-3.1/assimp-3.1.1_no_test_models.zip/download -O assimp-3.1.1_no_test_models.zip
    $ unzip assimp-3.1.1_no_test_models.zip
    $ cd assimp-3.1.1/
    $ cmake .
    $ make
    $ sudo make install
    $ sudo apt-get install libogre-1.9-dev
    

    **步骤7:**解决依赖关系
    确保所有依赖均已就绪,该指令会安装非ROS软件包的依赖,如一些系统软件和python包等:

    $ cd ~/ros_catkin_ws/
    $ proxychains4 rosdep install -y --from-paths src --ignore-src --rosdistro melodic -r --os=debian:buster
    

    **步骤8:**构建和获取安装
    在上述步骤中,我们完成了下载软件包并解决了依赖性。在此步骤中,我们准备构建柳絮包。

    此处使用 catkin_make_isolated 指令是为了在不使用任何ros setup脚本提供环境变量的情况下,仅使用catkin的基础功能来完成编译:

    $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
    

    在用户环境文件中设定开机配置ROS工作环境:

    $ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
    

    至此ROS已经安装完成,重启树莓派:

    $ sudo reboot
    

    再次启动后运行 roscore 来测试 ros:

    $ roscore
    

    日常安装软件包

    以下就省略proxychains4 了,执行联网程序时请自行添加。将其他软件包添加到已安装到ros生态系统中。首先,必须创建一个包含新软件包的新 rosinstall 文件(注意,这也可以在初次安装时完成)。例如,如果我们已经安装了ros_comm,但是想要添加 ros_controljoystick_drivers 则命令为:

    $ cd ~/ros_catkin_ws
    $ rosinstall_generator ros_comm ros_control joystick_drivers --rosdistro melodic --deps --wet-only --tar > melodic-custom_ros.rosinstall
    

    可以继续列出尽可能多的ROS软件包,并用空格分隔。

    而后使用wstool更新工作空间:

    $ wstool merge -t src melodic-custom_ros.rosinstall
    $ wstool update -t src
    

    更新工作空间后,运行rosdep来安装所需的任何新依赖项:

    $ rosdep install --from-paths src --ignore-src --rosdistro melodic -y -r --os=debian:buster
    

    最后,工作空间是最新的并且满足了依赖性,重新构建工作空间:

    $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
    

    安装Rosserial

    **方式1:**使用之前安装ros的工作空间编译安装

    $ cd ~/ros_catkin_ws
    $ rosinstall_generator rosserial --rosdistro melodic --deps --wet-only --tar > melodic-custom_ros.rosinstall
    $ wstool merge -t src melodic-custom_ros.rosinstall
    $ wstool update -t src
    $ rosdep install --from-paths src --ignore-src --rosdistro melodic -y -r --os=debian:buster
    $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
    

    **方式2:**使用新的工作空间编译安装

    一般安装新的软件包时我推荐使用该方法, 用这个方法之前安装ROS的工作文件夹就可以删除了,另外尽量新建一个工作文件夹用来安装ROS软件包不要在我们平常编写ROS代码的工作空间运行,防止在安装时,把我们编写的半成品代码安装进入系统目录下

    由于我们已经安装了ROS的基础内容,所以可以在此环境下通过catkin_make来完成其他软件包的构建

    创建一个新的工作空间:

    $ mkdir ~/ros_my_ws
    $ cd ~/ros_my_ws
    

    生成想要安装的软件列表文件,此工作会查询该软件的地址:

    $ rosinstall_generator rosserial --rosdistro melodic --deps --deps-only --tar --exclude RPP > my.rosinstall
    
    • --rosdistro 选项告诉它从哪个ROS分发中提取这些软件包

    • --deps 选项告诉它获取您指定的软件包的依赖关系

    • --deps-only 告诉它避免包括您指定的软件包(我假设您已经拥有了这些软件包)

    • --tar 选项告诉如果可能的话,它可以获取tarball而不是git / hg信息库(下载速度更快)

    • --exclude RPP 选项告诉它避免添加可以在本地RPP上找到的软件包。

    它将所有这些信息输出到stdout,因此我们可以将其通过管道传送到文件中 > my.rosinstall,该文件的名称并不重要。

    拥有rosinstall文件后,您可以使用以下命令获取其中的软件包wstool:

    $ wstool init ~/ros_my_ws/src my.rosinstall -j8
    

    然后,可以按照ROS的源安装说明进行操作,执行 rosdep 和 catkin 命令:

    $ rosdep install --from-paths src -i -y
    $ su
    输入密码
    $ source /opt/ros/melodic/setup.sh
    $ catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
    

    或使用 catkin_make 安装,不过不推荐此方法,具体原因可以查看资料5

    $ catkin_make -DCMAKE_INSTALL_PREFIX=/opt/ros/melodic install -DCATKIN_WHITELIST_PACKAGES="rosserial"
    

    特别说明

    • 在编译源代码过程中可能会提醒缺少某些包,因为我们已经解决了ros的依赖包,那么此时出现的就是python或者其他系统软件了,粘贴那个名称搜索,如果是python包那么就使用sudo apt install python-xxx安装,如果是普通软件就使用sudo apt install xxx安装后继续即可。该现象仅出现在rosdep install --from-paths src -i -y 没有正常工作的情况下。
    • 在操作过程中某些联网缓慢的程序都可以通过 proxychains4 来加速。
    • wstool 运行过程中如果一直显示 XXX still active 说明下载卡了,Ctrl+C 退出再用 wstool update -t src指令继续即可。

    参考资料

    1. 删除敏感内容
    2. Installing ROS Melodic on the Raspberry Pi
    3. How To Install ROS Melodic, rosserial, and more on Raspberry Pi 4 (Raspbian Buster)
    4. Automatically get missing package dependencies
    5. catkin_make vs catkin_make_isolated, which is preferred?
    展开全文
  • 软件包安装 rpm包 源码包 源码包 二进制文件包 linux两种软件包:Redhat/Centos/FedoraRPMrpm,rpmbuild yum Ubuntu/DebianDPKGdpkg apt notecase-1.9.8-1.fc6.i386.rpm软件包名 版本 发布次数 平台平台:i386(32),...

    软件包安装

    rpm包
    半源码包
    源码包
    二进制文件包

    linux两种软件包:
    Redhat/Centos/FedoraRPMrpm,rpmbuild yum
    Ubuntu/DebianDPKGdpkg apt


    notecase-1.9.8-1.fc6.i386.rpm
    软件包名   版本  发布次数  平台
    平台:i386(32),x86_64(64),noarch

    RPM (rpm,yum) 

    rpm管理 (依赖性关系需要手动解决)

    rpm -ivh httpd-2.2.3-63.el5.i386.rpm-i install  v 过程  h 百分比
    rpm -ivh --root=/tmp/ httpd-2.2.3-63.el5.i386.rpm   //指定路径安装
    rpm -ivh httpd-2.2.3-63.el5.i386.rpm
    rpm -ivh httpd-manual-2.2.3-63.el5.i386.rpm
    rpm -q httpd
    rpm -qa |grep httpd//查询程序安装包信息
    rpm -ql httpd//查询软件的安装位置
    rpm -qf /etc/passwd//通过文件检索软件包
    rpm -qi httpd//查询安装包信息
    rpm -qc httpd
    rpm -qd httpd
    rpm -qf `which nmap`//查询命令的安装包
    rpm -e httpd
    rpm -e httpd --nodeps
    rpm -qip notecase-1.9.8-1.fc6.i386.rpm//查询未安装软件包详细信息
    rpm -qpl caching-nameserver-9.3.6-20.P1.el5.i386.rpm//未安装软件安装时的路径
    rpm -ivh httpd-2.2.3-63.el5.i386.rpm --force //强制安装
    rpm -e apr-devel --nodeps//不检测依赖关系卸载

    导入校验key
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
    rpm --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta

    ===========================================================================================

    安装

    [root@station230 Server]# rpm -ivh mysql-5.0.77-4.el5_6.6.i386.rpm 
    warning: mysql-5.0.77-4.el5_6.6.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
    error: Failed dependencies:
           perl(DBI) is needed by mysql-5.0.77-4.el5_6.6.i386
    ===========================================================================================
    yum管理 repodata(依赖性关系数据库)

    红帽系统yum软件库在镜像里的位置
    Server
    Cluster
    ClusterStorage
    VT

    ======================================================

    使用yum的步骤:

    1. 指定仓库
    cd /etc/yum.repos.d/
    vim rhel-debuginfo.repo
    [Server]
    name=Server
    baseurl=file:///media/Server
    enabled=1
    gpgcheck=1key的校验,没有导入公钥时可以关闭

    [VT]
    name=VT
    baseurl=file:///media/VT
    enabled=1
    gpgcheck=1

    [Cluster]
    name=Cluster
    baseurl=file:///media/Cluster
    enabled=1
    gpgcheck=1

    [ClusterStorage]
    name=ClusterStorage
    baseurl=file:///media/ClusterStorage
    enabled=1
    gpgcheck=1

    2. 安装
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release//导入红帽公钥
    yum clean all
    yum -y install mysql
    yum -y install mysql*
    yum -y install vsftpd mysql httpd

    扩展:自定义仓库

    (1)安装软件
    yum -y install createrepo
    createrepo 安装包目录  生成repodata

    (2)准备仓库
    [root@station230 soft]# pwd
    /var/ftp/pub/soft
    [root@station230 soft]# createrepo .

    1/1 - notecase-1.9.8-1.fc6.i386.rpm
    Saving Primary metadata
    Saving file lists metadata
    Saving other metadata
    [root@station230 soft]# ls
    notecase-1.9.8-1.fc6.i386.rpm  repodata

    (3)安装
    vim /etc/yum.repos.d/soft.repo
    [soft]
    name=private
    baseurl=file:///var/ftp/pub/soft
    enabled=1
    gpgcheck=0

    yum clean all
    yum -y install notecase
    yum -y update vsftpd

    # yum -y localinstall toilet-0.3-1.mga3.i586.rpm --nogpgcheck
    # rpm -ivh banner-1.3.2-1.fc17.i686.rpm --force --nodeps

    ============================================================

    yum clean all
    清空yum缓存

    yum list测试yum
    yum install httpd-devel

    wKiom1M7mBrByhZ0AALhrtc_1aM101.jpg

    yum remove apr-devel
    yum reinstall httpd
    yum provides */dhcpd.conf   
    查找dhcpd.conf文件属于哪个RPM包
    yum list tftp
    yum list | grep tftp
    yum -y remove tftp

    wKiom1M7l8GwPKnZAAGL94OFX0M163.jpg

    通过YUM管理软件包组[rhel-Server]
    name=Red Hat Enterprise Linux $releasever - $basearch - Debug
    baseurl=file:///mnt/Server
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

    yum grouplist

    wKiom1M7mMeSink9AAMWMiZgGCs930.jpgyum groupinfo "开发库"

    yum -y groupinstall "开发库" "开发工具"


    tarball(SOURCE)

    tar xvf httpd-2.2.11.tar.bz2 -C /usr/local/src#关注:INSTALL README

    Quick Start - Unix
     ------------------
    ./configure --prefix=PREFIX
        make
        make install
        PREFIX/bin/apachectl start



    源码包安装三步曲:

    1. # ./configure --prefix=/usr/local/apache2//检查环境,指定安装选项等参数,生成 Makefile

    2. # make//编译

    3. # make install//安装

    [root@station230 httpd-2.2.11]# ls /usr/local/apache2/
    bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
    [root@station230 httpd-2.2.11]# ls /usr/local/apache2/conf/httpd.conf 
    /usr/local/apache2/conf/httpd.conf

    [root@station230 httpd-2.2.11]# /usr/local/apache2/bin/apachectl start

    编译选项:
    ./configure --help 选项
    --prefix=DIR
    --enable-ssl
    --disable-filter
    --with-apr=PATH例如 --with-apr=/usr/local/apr   --with-apr
    --with-apr-util=PATH 

    ================================================================================

    二进制bin包

    [root@station230 pub]# chmod a+x jdk-6u27-linux-i586.bin 
    [root@station230 pub]# ./jdk-6u27-linux-i586.bin 













    本文转自zhang25yun51CTO博客,原文链接:http://blog.51cto.com/1585654/1388990 ,如需转载请自行联系原作者




    展开全文
  • 应用程序中有时需要调用其它软件,但有时用户没有安装需要调用的软件,为方便用户使用,以下例程实现了自动化的引导用户安装
  • 一、Ubuntu中软件安装方法 1、APT方式 (1)普通安装:apt-get install softname1 softname2 …; (2)修复安装:apt-get -f install softname1 softname2...
  • 一, ... 注:后缀名为 rpm 就是可安装软件包 b. 二进制源码包(成品): xxx.src.rom --> rpm|tarball -->再安装 注:源码包多一个 rpm|tarball 用于指定编译源码包的 rom c.源码包(...
  • 引言——linux安装软件大概分三种方式,一源码安装,二软件包安装,三在线安装,以下主要介绍二·、三两种。 以下摘自The Linux Command Line 中文版 第十五章     如果我们花些时间在 Linux 社区里,我们会...
  • linux软件包安装

    2019-06-11 10:13:23
    软件包安装 4.1 软件包类型 二进制包:已编译好,直接安装 xlockmore-5.31-2.el6.x86_64.rpm 二进制源码包(成品) : xxx.src.rpm --> rpm|tarball—>再安装 源码包(tarball): xxx.tar.gz xxx.tar...
  • 你有没有想过你的Linux系统上安装了几千个软件包? 是的,我说的是“千”。 即使是相当一般的 Linux 系统也可能安装了上千个软件包。 有很多方法可以获得这些包到底是什么包的详细信息。 首先,要在基于 ...
  • 1安装gcc的命令 sudo apt install gcc 使用这个命令是下载gcc的命令----这个命令系统会自动去匹配与系统最适应的gcc版本 如果你有特殊癖好可以这样写 sudo apt install gcc-7.3.0 或者sudo apt install gcc-4.9....
  • 安装软件包 方法一:点击图 2-7 中的“ OK ” 按钮之后,将会进入软件包的安装主界面,如图 2-8 所 示。    图 2-8 软件包的安装主界面 在 Pack Installer 窗口左部的 Device ...
  • *.tar:普通打包 *.tar.gz:已压缩 配置IP地址时,需要将DHCP服务关掉(优先级可能会影响ip地址的配置) 一、系统信息类命令 (1)利用date命令显示系统当前时间,并修改系统的当前时间。 [root@localhost ~]# date ...
  • 1.执行安装脚本 export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew
  • 如果没有更新过树莓派(raspberry pi)的软件包,则需要先更新一下,使用...然后,下载安装软件包,命令如下: sudo apt-get install 使用天后,发现系统下载实在是慢的无法接受了,在网上查了一下,主要原因
  • DEB软件包管理

    2020-08-28 17:24:53
    开源软件最早的时候没有软件包软件包管理器,用户只能下载源码包自行配置 编译 安装。 后来linux各发行版本推出了软件包格式和软件包管理程序 Red Hat、Centos使用RPM格式,Debian、Ubuntu使用DEB格式 Deb包的命名...
  • Linux总结

    千次阅读 多人点赞 2020-01-14 20:36:45
    /usr : 用于存放系统应用程序(使用yum命令下载的软件包会在这里); /opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里; /proc: 虚拟文件系统目录,是系统内存的映射...
  • 1.问题描述:在使用sudo apt-get update 和upgrade中会出现:dpkg:警告:无法找到软件包ca-certificates 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。dpkg:警告:无法找到软件包...
  • Openwrt 所有的软件包都都保存在<BUILDROOT>/package目录下,一个软件包占一个子目录。 软件包目录结构 例如: helloworld,如下所示 <BUILDROOT>/package/helloworld/Makefile重点,它定义了如何构...
  • 什么是rpm 什么是yum 什么是dnf rhel软件包如何安装、如何卸载、如何更新、如何管理
  • 本文是受到“Ubuntu18.0.4安装gcc,vim等,无法访问域名,输入sudo apt install gcc后 报错E: 软件包gcc还没有可供安装的候选者,的解决办法”启发后写的。 同样的问题: 安装gcc时,终端输入 sudo apt install gcc ...
  • 1. 无法定位软件包 在/etc/apt/sources.list 文件中更新配置源文件,内容如下: (需要把官方源注释掉) # #deb cdrom:[Debian GNU/Linux 2018.2 _Kali-rolling_ - Official Snapshot amd64 LIVE/INSTALL Binary ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,559
精华内容 4,623
关键字:

半安装软件包