Closed Yight001 closed 6 years ago
@Yight001 您好,docker容器跟本机的环境是完全分离的,所以您在本机安装cv2,对docker是不会影响的
@yeyupiaoling 但是之前在本机安装的numpy在docker中就能正常使用
@Yight001 您先了解Docker容器,如果不熟悉,可以在电脑本机上使用PaddlePaddle 也可以参考这个文章:http://blog.csdn.net/tengxing007/article/details/54380732
docker与本机是分离的,在docker里输入pip list 看下装了哪些python包
我估计 @Yight001 说的“host上安装的CV2在Docker里能用”其实是Docker image里也有CV2。
理论上有一种做法,可以让 Docker container 使用host上的Python package —— 在启动 container 的时候使用 -v
参数把host上的Python package directory map到container里。不过这不是一个好办法,因为host上和 container 里的的Python interpreter 可能不是同一个版本,所以他们的package不一定能通用。
如果要build一个Docker image,能用来跑依赖OpenCV和PaddlePaddle的Python程序,可以:
我在我的MacBook Pro上按照上述过程实践了一下,验证通过。
我的/tmp/cv2paddle/Dockerfile
的内容如下:
FROM paddlepaddle/paddle:latest
MAINTAINER Yi Wang <yi.wang.2005@gmail.com>
RUN apt-get update && apt-get install -y python-opencv
我用如下命令build我的image:
cd /tmp/cv2paddle
docker build -t cv2paddle .
用如下命令运行我的image,并且在其中启动一个Python 解释器,来验证可以import paddle和cv2:
yi@Yis-Mac-mini cv2paddle $ docker run --rm -it cv2paddle /bin/bash
root@c767b69c8ce5:/# python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle.v2 as paddle
>>> import cv2
>>>
我没有做进一步的验证,但是至少以上步骤确保import paddle和cv2都没问题。
可能大家会问为什么不在PaddlePaddle的标准Docker image里事先安装好 OpenCV2。其实团队还真讨论过这个可能性。但是OpenCV设计好几十个Ubuntu packages,会让 Docker image 大小剧增。而且国内访问Dockerhub速度很慢,并且非computer vison领域的AI开发者不会用到 OpenCV,所以最终决定不装。
如果有兴趣,欢迎一个负责computer vison的团队基于上述例子Dockerfile维护一个 PaddlePaddle for Vision 的 标准 image。
大神@wangkuiyi,我对Docker不是很熟悉,找了很多资料,我尝试您的做法,但是始终不能build这个镜像 docker build -t cv2paddle . 中的cv2paddle是 文件夹的名字吗?还有/tmp/cv2paddle/Dockerfile这个路径是本机的路径吗?
docker build -t cv2paddle .
这个命令中-t cv2paddle
是指定build生成的镜像的名字。后面的.
是指在当前目录.
下寻找Dockerfile
文件并使用该文件build cv2paddle
这个镜像。
@Yight001 如果你不了解使用Dockerfile构建一个镜像,可以在原来的镜像安装和更新你的库,使用命令
docker run -t -i 你的镜像 /bin/bash
然后使用exit
退出,在退出之前要记住镜像的ID,然后提交生成一个新的镜像
docker commit -m="提交信息" -a="作者" 刚才记录的ID 镜像名称
要注意是ID是你进入镜像看到的ID,比如root@1234566
,那么1234566就是ID
镜像名称的结构是:REPOSITORY:TAG
@yeyupiaoling 在镜像中如何更新我的库呢,按照您的方法进入了指定的镜像
我在镜像中安装了opencv但是还是报错
Try apt-get install libglib2.0-0
, if this still does not work, try find whether libgthread-2.0.so.0
exists and export LD_LIBRARY_PATH
to it's directory.
感谢大家的帮助,在参考了你们的方法后,这个问题得以解决。我的解决方法是在有opencv的镜像中,安装paddle,这样就可以import paddle.v2 和 import cv2。
在docker中使用python时 import cv2时报错,但在本机却没问题
使用paddle时,也会报错
问题应该就是在docker的python库中找不到opencv,但是没有什么好的方法解决,求大神帮帮忙!