问题:
部署的时候报错 Couldn't find path to unrar library, 虽然在requirements.text中已经写了需要unrar。
原因:
即使pip安装了unrar,还是需要依赖RAR的官方库
解决方案:
- 这时候docker是无法启动的,需要使用命令替换掉使用了unrar的py文件
docker container cp /宿主机文件地址 容器名称:容器文件地址
文件地址需要到具体文件名例如:/main/upload.py my_project:/app/upload.py
- 重启docker,以管理员身份登录
- 安装RAR官方依赖,官方地址,下载UnRAR release source,以下是一些Linux命令
wget https://www.rarlab.com/rar/unrarsrc-6.2.12.tar.gz
tar zxvf unrarsrc-6.2.12.tar.gz
cd unrar
make lib
make install-lib
- 进行以上步骤以后会在/usr/lib文件夹下有一个libunrar.so文件
- 通过vim修改/etc/profile文件(可能需要先安装vim)
apt-get update
apt-get install vim
vim /etc/profile
- 在文件的末尾加上export UNRAR_LIB_PATH=/usr/lib/libunrar.so这一行,(可能有人不会vim,简单提一下这的操作,执行完vim命令后按i,通过方向键移动到末尾输入,然后按esc,输入:wq回车保存退出)
- 使文件修改生效
source /etc/profile
测试
如果不报错,就可以重新将我们正确代码的文件通过docker cp命令重新复制到容器中了
>>> from unrar import rarfile
>>> rar = rarfile.RarFile('sample.rar')
>>> rar.namelist()
[u'test_file.txt']
>>> rar.printdir()
File Name Modified Size
test_file.txt 2013-04-14 08:20:28 17
>>> rar.testrar()
>>> info = rar.infolist()[0]
>>> info.filename
u'test_file.txt'
>>> info.file_size
17L
>>> info.date_time
(2013L, 4L, 14L, 8L, 20L, 28L)
>>> rar.extractall()
>>> rar.read('test_file.txt')
'This is for test.'