ubuntu下conda+pytorch+opencv环境配置 | 大专栏
在ubuntu系统上利用安装conda,pytorch,opencv,并结合rfb-net在voc2007和voc2012上完成测试。核心内容还是环境的配置,特别是解决环境配置中遇到的各种问题。
安装
python版本问题
目前的conda对应的python3版本是3.7,但是ubuntu16.04的系统自带版本是python3.5,而ubuntu18.04自带版本又是python3.6,而网上很多的安装教程又都是conda对应python3版本是python3.6的情况。也许曾经是,但是由于这个原因,在整个环境的安装过程,参照别教程安装的时候会出现很多问题,所以一一列举出来并解决。
更新: conda对应的python版本是根据不同conda版本是不同的,也许有的就是python3.6和系统版本一样
conda安装
conda介绍
conda本身可以看做是一个集成环境,自己集成了很多的第三方包,而且还都是主要用于机器学习和数据分析的包
其次conda还可以继续安装其他的第三方库,就到这里来看,conda和python很接近,只不过是比python集成的内容更多
但是conda和python不同的地方在于,conda是可以把python当做一个包来管理的,也就是conda下面可以安装不同版本的python,生产不同的虚拟环境,执行不同的操作。而且在安装conda的时候,一般它会自带一个版本的python,比如本次试验中的python3.7
快速安装
参见conda安装教程
如果原文下载链接无法打开,可以点此进入
问题分析
python版本问题
如果是python2,就不存在这个问题,但是如果是python3的conda就是前面提到的问题,再conda安装的时候,会自动安装一个python3.7并且设置成ubuntu系统版本,也就是ubuntu中再输入python3的时候会进入到python3.7而且后面还会跟有anaconda
这时候可以把这个python7当做conda的一个虚拟环境(即类似再python中建立的一个虚拟环境)。然后conda在这个虚拟环境中装了很多第三方包 这其实也就是我们为什么用从conda的原因,方便。装好一个conda,就什么都有了,而且安装其他pytorch,opencv什么的也很方便。
但是整个的这样的一些配置都可以把它当做一个虚拟环境看待,这样对后面解决问题很有帮助。而且装好的conda其实也就是主目录下的一个文档夹,所有的可执行文档,第三方库,都在里面,而没有说被安装到系统其他目录中。
conda命令无效
多半是路径的问题,前面也提到conda安装后,不会像是安装其他东西自动添加到系统其他目录中,在shell检索的时候可以检索到,所以我们需要把conda可执行问题的路径添加到系统路径
参加修改环境变量教程修改
如果不习惯vim,可以使用nano,使用感觉更偏向与平常的一些文本编辑器
总结
自此,conda的安装就算是基本完成了,如果还有什么问题,可以邮件留言
pytorch安装
快速安装
参加pytorch安装教程,可以完成安装
问题分析
在教程中,其实已经把所有问题都分析完了,而且我们最终采用的也是这个解决方法,如果最开始就能看到这篇教程就不用走这么多弯路了!!!
很多教程都说了修改conda的源可以解决condahttperror错误,但是实际上我们之前尝试过修改到了清华的,中科大的源,但是都是不行,用conda安装的时候还是会出现这个问题。猜测多半是系统代理的问题,但是还是没有
conda安装不一定就不行,所以还是可以先尝试一下,因为经过试验源码安装pytorch非常耗时间,也许是个人网络问题
pip安装
后来经过尝试发现pip也不一定不可以安装,如果直接使用如下命令是不可以:
1
sudo pip3 install pytorch
但是如果在pytorch官网之中直接选择pip安装选项,利用官网生产的pip安装选项是可以安装的:
1
sudo pip3 install torch torchvision
只不过说这样安装的结果并不是在conda的整个环境之下,而是在本地的python 存放第三库的文档夹中,而前面说过,conda是自成一个环境的,所以目前这样安装的时候,如果进入的conda下的python,那么import torch的时候没有办法导入的,后面的opencv也是如此。
解决办法就是将这个本地python下的第三方库的文档夹,加入到环境变量当中。是的,最开始的时候是没有加进去的,当然也不能排除某些情况就已经加入进去了,那么导入的时候应该是可以导入的。因为就算是conda下的python版本,其检索路径也会包括系统环境变量
opencv安装
概述
opencv的安装应该是一个踩坑最多的地方,以至于说连连一个还算看的过去的安装教程都没有,所以这里决定慢慢写一个
pip问题
利用 pip install opencv-python 安装的时候,最开始是遇到了如下问题:
1 2 3 4 5 6 7 8 |
retrying (retry(total=4, connect=none, read=none, redirect=none)) after connection broken by 'proxyerror('cannot connect to proxy.', newconnectionerror('<pip._vendor.requests.packages.urllib3.connection.verifiedhttpsconnection object at 0x00000000044cf7b8>: failed to establish a new connection: [errno 10061] ',))': /simple/requests/ retrying (retry(total=3, connect=none, read=none, redirect=none)) after connection broken by 'proxyerror('cannot connect to proxy.', newconnectionerror('<pip._vendor.requests.packages.urllib3.connection.verifiedhttpsconnection object at 0x00000000044cf6a0>: failed to establish a new connection: [errno 10061] ',))': /simple/requests/ retrying (retry(total=2, connect=none, read=none, redirect=none)) after connection broken by 'proxyerror('cannot connect to proxy.', newconnectionerror('<pip._vendor.requests.packages.urllib3.connection.verifiedhttpsconnection object at 0x00000000044cf5f8>: failed to establish a new connection: [errno 10061] ',))': /simple/requests/ retrying (retry(total=1, connect=none, read=none, redirect=none)) after connection broken by 'proxyerror('cannot connect to proxy.', newconnectionerror('<pip._vendor.requests.packages.urllib3.connection.verifiedhttpsconnection object at 0x00000000044cf4a8>: failed to establish a new connection: [errno 10061] ',))': /simple/requests/ retrying (retry(total=0, connect=none, read=none, redirect=none)) after connection broken by 'proxyerror('cannot connect to proxy.', newconnectionerror('<pip._vendor.requests.packages.urllib3.connection.verifiedhttpsconnection object at 0x00000000044cf358>: failed to establish a new connection: [errno 10061] ',))': /simple/requests/ could not find a version that satisfies the requirement (from versions: ) no matching distribution found for requests |
细节上会有所不同,因为我是网上截取了request的安装报错,因为最开始报错的时候没有截图,不过基本就是这个问题。
可以明确的是,这个是系统代理的问题,因为绝大部分ubuntu用户都会必备一个SS。所以不用说去想着换pip源什么的解决这份问题,不过源还是要换的,毕竟国内源还是快。但是讲真最后解决的自己都记不太清楚了。但是基本思路如下:
首先,检查ubuntu的网络代理问题,也就是系统设置下的网络,把网络代理禁用掉
然后就是检查全局的代理设置,可以使用如下命令尝试:
1 |
pip install --proxy=user:pass@server:port <package name> |
比如说大家的SS基本都是配置的127.0.0.1:1080,那么就是:
1 |
pip install --proxy=user:pass@127.0.0.1:1080 opencv-python |
用户名和密码需要改成自己的。
有可能行,有可能还是不行,我最开始好像就是不行,,,
最后就是设置全局代理
1 2 |
set http_proxy=username:password@proxy:port set https_proxy=username:password@proxy:port |
proxy,就是代理服务器ip
如果还是不行,大家可以去这两个网页看看,我当时好像做到这,怎么的就好了。。。
参考资料:
https://github.com/skvark/opencv-python/issues/102
https://github.com/pypa/pip/issues/5362
apt-get 安装
因为之前那个问题,所以网上还有一部分教程是说,你可以用apt-get安装。而事实证明这样确实能够安装,但是尴尬的问题在于,这样安装完成之后,最后还是说import cv2的时候找不到cv2.
而且这个找不到是指就算是进入本地的python2,python3都找不到,跟后面的本地python能找到,但是conda下的python找不到是完全不同的,所这种方法基本是无效的
pip安装
如果有幸解决了最开始pip的问题,或者根本就没与遇到pip的问题,可以使用pip安装。
1 2 |
sudo pip3 install opencv-python sudo pip install opencv-python |
但是同样还是遇到几个棘手的问题。就算是你用pip,pip3分别安装了opencv-python,而且在彼此的环境中都成功导入了cv2,或者说在python3中是 python3.5(ubuntu16), python3.6(ubuntu18) 中成功导入,但是在python3.7中就是不行,所以在conda中也还是不行。原因是猜测,这两个安装方式安装的opencv包都放在了/user下了,但是python3.7是conda的python版本,是放在conda的文档下的,所以找不到。
而且也许你也在网上看到了说把python2.7下的cv2文档拷到conda的python目录下,但是却还是不行,因为那个移动的是python2下的cv2,但是你的版本是python3的,所以不行。
最佳的解决办法就是将python3下的cv2包直接复制到conda文档夹python的site-packages文档夹下。就好像是给python3.7装了这个第三方包一样。而不是只移动.so文档。前面说过的,python3.7就是conda下的一个虚拟环境,而安装第三方包只不过就是把连接文档下载下来放到python的检索目录下,所以可以直接这么做。
再或者就是如图刚刚解决torch的方法一般,添加环境变量,如果发现已经是环境变量了,那么就采取刚刚说到的复制文档夹的方式
然后也许还是会碰到一个,importerror: no module named cv2.cv2的问题,这个是因为没有cv2.so的问题,至于为什么python3中直接运行的时候没有,猜测是会自动过滤掉那个版本号。解决办法就是将python3.7目录下的cv2.x86_64-linux-gnu.so,改成cv2.so就可以。然后就算是解决了opencv的安装问题了。