Seafile Server 7.1.3避坑:解决依赖关系

五迷三道 提交于 2020-04-06 18:23:00

1. Seafile依赖说明

  以下依赖,* 标记的为必装,加粗表示推荐使用系统提供的软件包 安装(有些python包之所以推荐使用系统提供的包管理器安装,是因为他们基本都需要编译,并且有的软件包还依赖其他第三方的软件,若使用pip安装,需要安装其他依赖):

依赖(*为必装) 说明
pip * Python 的包管理器,推荐使用系统软件包安装,包名为 python3-pip
wheel * Python 包的最新二进制格式支持,部分 Python 包安装时会先打包成 .whl 格式,需要这个包的功能
python3 * 使用系统软件包安装,包名为 python3
sqlite3 使用sqlite数据库时需要安装,apt中包名为 sqlite3,yum中包名为 sqlite
mysql-server 使用mysql数据库时要安装,若有其他可用的mysql服务,可以不装。这里推荐 mariadb-server,因为各发行版都会提供
python-ldap 需要使用ldap存储用户信息(通常在企业中使用)时要安装,推荐使用系统软件包
jinja2 这是 Python Web 开发的一套模板系统,功能、性能、安全性都比较强,不安装这个包并没发现什么影响,可能专业版需要 *
sqlalchemy Python 的一套功能强大的 ORM 系统,不安装没发现受到影响,可能专业版会用到。
pylibmc Python 的 memcached 绑定,可以理解为 python 语言使用 memcached 服务的客户端,不使用 memcache加速的可以不用安装 *
django-simple-captcha * Django的插件,生成表单验证码使用,虽然没看到哪个表单有验证码,但是这个插件必须安装,否则 seahub 会发生 500 内部服务器错误。
captcha * django-simple-captcha 的依赖,必须安装
Pillow * captcha 的依赖,必须安装
psd-tools 用来支持 psd 文件(Photoshop 图片源文件), 相关依赖非常大(几百M) ^2 *

* 从这次多出来的依赖来看,可能seafile团队打算使用flask今后将Seahub重写(胡乱猜测 -_-||)
* memcached是需要额外配置的服务,通过将数据缓存在内存达到加速的目的,使用时需注意内存是否足够
* psd-tools 我没有测试,可能只是用来在线预览,也可能支持在线简单编辑,有人测试了希望能给我反馈

2. 准备工作

  使用的 pip 为系统级 Python 环境, 如果使用 root 用户运行会造成升级系统的部分软件包,有可能会导致其他的系统软件依赖关系冲突,所以我们运行 pip 命令安装软件包的时候需要添加 --user 选项,把需要的包安装在用户家目录。

  此外,使用 pip 安装 python 包的时候,会自行解决依赖关系,但是 在这里,由于 seafile-server 安装包自带的一部分依赖不宜被覆盖或升级,因此我们在安装依赖前应该把 seafile-server 自带的 Python 包让 pip 能识别,其方法是到处环境变量 PYTHONPATH,使其执行自带的 python 包目录。

注意:此处假设起始路径为 /opt,当前用户为 seafuser,下载的安装包在用户家目录。

$ sudo mkdir seafile
$ sudo chown seafuser.seafuser seafile
$ cd seafile
$ tar xzf ~/seafile-server-7.1.3.tar.gz
$ export PYTHONPATH=/opt/seafile/seafile-server-7.1.3/seahub/thirdpart

3. 安装必装软件

由于 Pillow 和 captcha 都处在 django-simple-captcha 的依赖链中,所以使用 pip 只要安装最后一个就行了。

使用 pip install --user 安装的 Python 包,会保存在家目录下的 .local/lib/python3.X/site-packages 其中 python3.X 以实际版本号代替。

-> Deb 系:

$ sudo apt update
$ sudo apt install -y python3 python3-pip python3-wheel
$ pip3 install --user django-simple-captcha 

-> Rpm 系:

$ sudo yum install -y python3 python3-pip python3-wheel
$ pip3 install --user django-simple-captcha

4. 根据需要安装其他软件包

-> Deb 系:

$ sudo apt install -y sqlite3
$ sudo apt install -y mariadb-server
$ sudo apt install -y pylibmc
$ sudo apt install -y sqlalchemy
$ sudo apt install -y python3-ldap
$ pip3 install --user jinja2
$ pip3 install --user psd-tools

-> Rpm 系:

$ sudo yum install -y sqlite3
$ sudo yum install -y mariadb-server
$ sudo yum install -y pylibmc
$ sudo yum install -y sqlalchemy
$ sudo yum install -y python3-ldap
$ pip3 install --user jinja2
$ pip3 install --user psd-tools

5. 转移安装的 Python包

安装完成之后,需要把安装的软件包移到 seafile 文件夹中适当的位置,避免之后启动 seahub 出现依赖问题。

mv -f ~/.local/lib/python3.X/site-packages/* $PYTHONHOME

至此,依赖安装完毕,可以进行下一步了:

$ cd seafile-server-7.1.3
$ ./setup-seafile.sh            # or ./setup-seafile-mysql.sh

 6. 对 django-simple-captcha 包的额外说明

有的朋友刚安装完成时是好的,可是机器重启后,seahub就无法启动成功,通过

$ ./seahub.sh start-fastcgi

命令可以发现报错信息:

ModuleNotFoundError: No module named 'captcha.fields'

这主要是由于 python 包 django-simple-captcha 怪异的安装方式导致的:django-simple-captcha 包依赖 captche 包,在安装过程中,将自身文件填充至 captcha 包中,以实现 captcha 对 django 的支持。

这种安装方式带来了潜在的问题:

如果 captcha 和 django-simple-captcha 安装在不同的地方,将在两个地方分别创建 captcha 目录,根据 Python 搜索包的方式,搜到其中一个 captcha 目录后,即停止搜索,此时就会发现两个问题,要么captcha导入失败,要么找不到captcha.fields。

解决方式就是把他们安装在一个位置:seafile-server-latest/seahub/thirdpart 目录下,如果已经出问题了,可以把两个目录合并,然后复制到这个目录下。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!