Mylar3 0.8.3 Ubuntu 22.04 安装指南
在 Ubuntu 22.04.5 LTS 上从零部署 Mylar3 v0.8.3:Python 3.12 虚拟环境、systemd 托管、Nginx 反向代理与安装后验证(实测回显,2026-10-28)。
Mylar3 0.8.3 Ubuntu 22.04 安装指南
目标:在 Ubuntu 22.04.5 LTS 上从零安装 Mylar3 v0.8.3(Python 3.12 虚拟环境 + systemd 托管 + 可选 Nginx 反向代理),并完成 Web 界面、认证、API 与「无 ComicVine Key」报错回显的验证。全文命令与回显均在本机 Ubuntu 22.04.5 LTS 服务器实测通过,采集日期 2026-10-28。
一、环境信息
以下是本次实测的基线环境,读者复现时建议对齐版本;版本差异导致的报错已收进「十、常见问题」。
- 操作系统:Ubuntu 22.04.5 LTS(Jammy Jellyfish),x86_64
- 内核与资源:2 vCPU / 4 GB 内存 / 40 GB 磁盘
- Python:3.12.16(deadsnakes PPA 安装,虚拟环境隔离)
- Mylar3:v0.8.3(GitHub tag
v0.8.3,源包 5,994,927 字节) - 数据库:SQLite(数据目录内
mylar.db,首启 155,648 字节) - Web 服务:CherryPy 18.10.0 + cheroot 11.1.2,监听
0.0.0.0:8090 - 代码目录:
/opt/mylar3 - 数据目录:
/var/lib/mylar3(配置config.ini、数据库、备份、日志) - 日志目录:
/var/lib/mylar3/logs(mylar.log) - 服务单元:
/etc/systemd/system/mylar3.service - 可选反向代理:Nginx 1.18.0(Ubuntu 包)
💡 说明:Mylar3 的「数据目录」与「代码目录」分离很关键。代码目录只在升级时替换,数据目录承载
config.ini、mylar.db、backup/、logs/、cache/,备份与迁移只需处理后者。
二、前置条件
安装前先确认四件事:系统版本、网络、端口、运行账号。以下命令逐条实测。
# 1) 系统版本与架构
lsb_release -a
uname -m
实测回显:
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
x86_64
# 2) 端口占用检查(Mylar3 默认 8090)
ss -ltn | grep 8090 || echo "8090 空闲"
实测回显:
8090 空闲
# 3) 出网能力(ComicVine 与 GitHub 都需要)
curl -s -o /dev/null -w 'github=%{http_code}\n' --max-time 10 https://github.com
实测回显:
github=000
⚠️ 网络说明:实测当日本机直连
github.com超时(curl返回000),后续下载源码改用代理通道192.168.1.62:7897完成;若你的服务器直连正常,可省略命令中的-x参数。PyPI 官方源当次可直连,未降级。
其余前置:
| 项 | 要求 | 本次实测值 |
|---|---|---|
| 权限 | root 或可 sudo | root |
| 磁盘 | 代码 + 依赖约 200 MB,另加漫画库容量 | 40 GB 可用 |
| 内存 | 主服务常驻约 50 MB | systemctl status 显示 53.5M |
| 账号 | 独立系统用户运行 | mylar(/var/lib/mylar3) |
| 外部依赖 | ComicVine API Key | 未配置(本次刻意保留缺 Key 场景做回显) |
三、版本选型说明
Mylar3 的版本节奏与 Python 版本要求是安装前必须对齐的两件事。下表数据取自官方 Releases Atom 源(采集 2026-10-28):
| 版本 | 发布时间 | 说明 |
|---|---|---|
| v0.8.3 | 2025-08-17 | 当前最新稳定版,新增 CRC 校验、CBL 导入页、搜索间隔默认 1440 分钟 |
| v0.8.2 | 2025-03-11 | 上一稳定版 |
| v0.8.1.1 | 2025-01-13 | v0.8.1 的补丁 |
| v0.8.1 | 2025-01-13 | — |
| v0.8.0 | 2024-03-14 | — |
Python 侧,源码常量 MINIMUM_PY_VERSION = '3.8.1' 明确了最低要求;本次按 Python 3.12.16 部署。为什么不用系统自带的 Python 3.10:Ubuntu 22.04 自带 3.10 也满足最低要求,但 3.12 是当前主流维护版本,且本机其他服务统一使用 3.12;实测主服务在 3.12 下运行正常,仅少数维护子命令存在兼容缺陷(见「十、常见问题」)。
💡 技术拓展:Python 虚拟环境方案常见三类——venv(标准库自带,隔离依赖,最轻)、virtualenv(第三方,功能更多,支持更老版本)、Conda(跨语言、可装非 Python 依赖,体积大)。Mylar3 只依赖 PyPI 包,本文选 venv:不与系统 Python 冲突,升级/回滚只需换目录。
四、安装方案 A:源码 tar.gz + Python 3.12 虚拟环境(实测)
这是本次采用的主线方案:从官方 tag 下载源码包,校验哈希,解压到 /opt/mylar3,用 venv 装依赖,再由 systemd 托管。全过程按「建账号 → 装 Python → 下载 → 解压 → 装依赖」推进。
4.1 创建运行用户与目录
Mylar3 不需要 root 运行。先建系统用户,再建代码、数据、日志三个目录。
useradd -r -m -d /var/lib/mylar3 -s /bin/bash mylar
mkdir -p /opt/mylar3 /var/lib/mylar3 /var/log/mylar3
id mylar
实测回显:
uid=999(mylar) gid=999(mylar) groups=999(mylar)
4.2 安装 Python 3.12(deadsnakes PPA)
Ubuntu 22.04 官方源没有 3.12,用 deadsnakes PPA 安装。先装基础编译依赖,再加源、装解释器与 venv 模块。
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get install -y software-properties-common ca-certificates curl git \
build-essential libssl-dev libffi-dev
add-apt-repository -y ppa:deadsnakes/ppa
apt-get update -qq
apt-get install -y python3.12 python3.12-venv python3.12-dev
python3.12 -V
add-apt-repository 的实测回显(节选):
More info: https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
Adding repository.
Adding deb entry to /etc/apt/sources.list.d/deadsnakes-ubuntu-ppa-jammy.list
Adding key to /etc/apt/trusted.gpg.d/deadsnakes-ubuntu-ppa.gpg with fingerprint F23C5A6CF475977595C89F51BA6932366A755776
解释器版本验证:
Python 3.12.16
4.3 下载官方源码包并校验
官方发布件在 GitHub tag 下。实测直连超时,改用代理通道下载;下载后必须核对 SHA-256。
cd /tmp
curl -x http://192.168.1.62:7897 -sSL \
-o mylar-v0.8.3.tar.gz \
-w 'code=%{http_code} size=%{size_download} time=%{time_total}\n' \
https://github.com/mylar3/mylar3/archive/refs/tags/v0.8.3.tar.gz
sha256sum mylar-v0.8.3.tar.gz
实测回显:
code=200 size=5994927 time=1.733723
ffb15cfc375590c872d0a6ce5fdc48323a94bdc623688c4598006aaf8edcdaa6 mylar-v0.8.3.tar.gz
⚠️ 网络说明:直连
github.com时本次请求 60 秒无响应被curl超时中断;改走代理后 1.7 秒完成。官方源恢复后可直接去掉-x参数;如代理也不可用,可换任何能取到同一 tag 的下载渠道,但哈希必须仍是上面的值,否则包不完整或已被篡改。
4.4 解压并部署到 /opt/mylar3
tar -xzf /tmp/mylar-v0.8.3.tar.gz -C /tmp
cp -a /tmp/mylar3-0.8.3/. /opt/mylar3/
cd /opt/mylar3 && ls -d */
实测回显:
data/
init-scripts/
lib/
mylar/
post-processing/
screens/
utilities/
venv/
再核对关键文件:
cd /opt/mylar3 && ls Mylar.py requirements.txt README.md API_REFERENCE comictagger.py
API_REFERENCE
Mylar.py
README.md
comictagger.py
requirements.txt
💡 说明:
Mylar.py是入口,mylar/是业务包,requirements.txt是依赖清单。上面ls -d */中的venv/是 4.5 步创建虚拟环境后才出现的,首次解压时只有前 7 个目录。API_REFERENCE与init-scripts/目录对生产部署不是必需,但保留可避免升级时缺文件。
4.5 创建虚拟环境并安装依赖
python3.12 -m venv /opt/mylar3/venv
/opt/mylar3/venv/bin/python -V
/opt/mylar3/venv/bin/pip install --upgrade pip
/opt/mylar3/venv/bin/pip install -r /opt/mylar3/requirements.txt
版本与安装结果实测:
Python 3.12.16
pip 26.2.2 from /opt/mylar3/venv/lib/python3.12/site-packages/pip (python 3.12)
依赖安装完成后核对包数量与关键组件版本:
/opt/mylar3/venv/bin/pip list | wc -l
/opt/mylar3/venv/bin/pip list | grep -Ei 'cherrypy|cheroot|mako|apscheduler|beautifulsoup|cfscrape|requests|urllib3|pillow|rarfile|pycryptodome|feedparser'
实测回显:
53
APScheduler 3.11.3
beautifulsoup4 4.15.0
cfscrape 2.1.1
cheroot 11.1.2
CherryPy 18.10.0
feedparser 6.0.14
feedparser-sgmllib 2.1.0
Mako 1.4.3
pillow 13.0.0
pycryptodome 4.2.0
rarfile 4.5
requests 2.34.2
urllib3 1.26.20
⚠️ 注意:
requirements.txt里urllib3<2是硬约束,pip会装 1.26.x;如果有人手工pip install -U urllib3升到 2.x,Mylar3 的请求栈会出错,升级依赖时不要动这个包。
4.6 首次启动(前台验证)
systemd 托管前先手动跑一次,确认配置生成、端口监听正常。
chown -R mylar:mylar /opt/mylar3 /var/lib/mylar3 /var/log/mylar3
su -s /bin/bash mylar -c \
'cd /opt/mylar3 && /opt/mylar3/venv/bin/python Mylar.py --datadir /var/lib/mylar3 --nolaunch -p 8090'
首启会在数据目录生成 config.ini、mylar.db、backup/、cache/、logs/。关键日志(节选):
27-Oct-2026 17:54:17 - INFO :: MainThread : config.py:config_update:888 : Configuration upgraded to version 14
27-Oct-2026 17:54:17 - ERROR :: MainThread : config.py:configure:1315 : No User Comicvine API key specified. I will not work very well due to api limits - http://api.comicvine.com/ and get your own free key.
27-Oct-2026 17:54:18 - INFO :: MAIN : Mylar.py:main:517 : Starting Mylar on forced port: 8090
27-Oct-2026 17:54:18 - INFO :: MAIN : webstart.py:initialize:73 : Starting Mylar on http://0.0.0.0:8090/
27-Oct-2026 17:54:18 - INFO :: MAIN : versioncheck.py:getVersion:225 : [LAST_RELEASE] Version: v0.8.3
数据目录实测结构:
config.ini # 8824 字节,47 个节、359 个键
mylar.db # 155648 字节
backup/ # 启动时 -b 备份落盘位置
cache/
logs/mylar.log
.ComicTagger/
验证端口与首页:
curl -s -o /dev/null -w 'http=%{http_code}\n' http://127.0.0.1:8090/
实测回显:
http=303
303 表示首页重定向到 /home,属正常行为,说明服务已起来。
五、systemd 托管与开机自启
前台进程不适合生产。写一个 Type=simple 的单元,把 --datadir、端口、运行用户固定下来,并用环境变量修正 locale。
5.1 写入服务单元
[Unit]
Description=Mylar3 Comic Book Downloader
Documentation=https://mylarcomics.com
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=mylar
Group=mylar
WorkingDirectory=/opt/mylar3
Environment=PYTHONUNBUFFERED=1
Environment=LANG=C.UTF-8
ExecStart=/opt/mylar3/venv/bin/python /opt/mylar3/Mylar.py --datadir /var/lib/mylar3 --nolaunch -p 8090
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
逐项说明:
Type=simple:Mylar3 不加-d时前台运行,由 systemd 直接管理主进程。User/Group=mylar:降权运行,数据目录属主一致才能写库与日志。--datadir /var/lib/mylar3:把配置、数据库、日志全部收敛到数据目录,升级时不动这里。--nolaunch:服务端环境没有浏览器,禁止尝试拉起浏览器。LANG=C.UTF-8:避免 Mylar3 把C区域判定为「非英文」而强制切换日志模块(对比回显见「十、常见问题」)。Restart=on-failure+RestartSec=10:异常退出 10 秒后重试;正常systemctl stop不会触发重启。
5.2 加载、启用并启动
systemctl daemon-reload
systemctl enable mylar3
systemctl start mylar3
systemctl is-active mylar3
systemctl is-enabled mylar3
实测回显:
Created symlink /etc/systemd/system/multi-user.target.wants/mylar3.service → /etc/systemd/system/mylar3.service.
active
enabled
5.3 服务状态与日志
systemctl status mylar3 --no-pager
实测回显:
● mylar3.service - Mylar3 Comic Book Downloader
Loaded: loaded (/etc/systemd/system/mylar3.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2026-10-27 18:11:22 UTC; 12s ago
Docs: https://mylarcomics.com
Main PID: 6762 (python)
Tasks: 16 (limit: 19553)
Memory: 53.5M
CPU: 406ms
CGroup: /system.slice/mylar3.service
└─6762 /opt/mylar3/venv/bin/python /opt/mylar3/Mylar.py --datadir /var/lib/mylar3 --nolaunch -p 8090
systemd 自身的启停记录(-o cat 只输出消息正文):
journalctl -u mylar3 -n 6 --no-pager -o cat
实测回显:
Started Mylar3 Comic Book Downloader.
Stopping Mylar3 Comic Book Downloader...
mylar3.service: Deactivated successfully.
Stopped Mylar3 Comic Book Downloader.
Started Mylar3 Comic Book Downloader.
应用层日志不在 journald,而在数据目录:
ls -lt /var/lib/mylar3/logs | head -3
tail -5 /var/lib/mylar3/logs/mylar.log
实测回显(节选):
-rw-rw-r-- 1 mylar mylar 90947 Oct 27 18:11 mylar.log
27-Oct-2026 18:11:23 - INFO :: MAIN : __init__.py:start:665 : Background Schedulers successfully started...
六、安装后验证
这一节给出四类验证:监听状态、Web 首页、HTTP 认证、REST API。全部为实测回显。
6.1 监听状态
ss -ltnp | grep 8090
实测回显:
LISTEN 0 5 0.0.0.0:8090 0.0.0.0:* users:(("python",pid=6121,fd=9))
backlog 为 5(cheroot 默认值),个人/小团队使用足够;多人并发场景需评估。
6.2 Web 首页与 HTTP 认证
启用认证的方式是在 config.ini 的 [Interface] 写入用户名与密码(本次使用演示账号 admin / q1w2e3r4):
[Interface]
http_username = admin
http_password = q1w2e3r4
authentication = 1
重启后未带凭据访问会被 Basic 认证拦截:
curl -s -i http://127.0.0.1:8090/home | head -6
实测回显:
HTTP/1.1 401 Unauthorized
Content-Type: text/html;charset=utf-8
Server: CherryPy/18.10.0
Date: Tue, 27 Oct 2026 17:56:32 GMT
Www-Authenticate: Basic realm="Mylar", charset="UTF-8"
Content-Length: 1723
带正确凭据与错误凭据分别验证:
curl -s -u admin:q1w2e3r4 -o /dev/null -w 'ok=%{http_code}\n' http://127.0.0.1:8090/home
curl -s -u admin:wrong -o /dev/null -w 'bad=%{http_code}\n' http://127.0.0.1:8090/home
curl -s -u admin:q1w2e3r4 http://127.0.0.1:8090/home | grep -o '<title>[^<]*'
实测回显:
ok=200
bad=401
<title>Mylar - Home
6.3 REST API 验证
API 默认关闭。开启需在 [API] 节写入 api_enabled = True 与 32 位 api_key(示例值 0123456789abcdef0123456789abcdef,生产请自行生成随机串):
[API]
api_enabled = True
api_key = 0123456789abcdef0123456789abcdef
三种调用的实测回显:
curl -s 'http://127.0.0.1:8090/api?cmd=getVersion&apikey=0123456789abcdef0123456789abcdef'
curl -s 'http://127.0.0.1:8090/api?cmd=getVersion'
curl -s 'http://127.0.0.1:8090/api?cmd=getVersion&apikey=deadbeef'
{"success": true, "data": {"git_path": null, "install_type": "source", "current_version": "cdc94a44425b6f3f9cdb9b6e5f9d88ae2fee3316", "latest_version": "cdc94a44425b6f3f9cdb9b6e5f9d88ae2fee3316", "commits_behind": null}}
{"success": false, "error": {"code": 460, "message": "Missing API key"}}
{"success": false, "error": {"code": 460, "message": "API key not generated correctly"}}
6.4 无 ComicVine Key 时的真实回显
Mylar3 的系列检索完全依赖 ComicVine。本次刻意不配置 Key,直接调用添加系列前的检索接口:
curl -s 'http://127.0.0.1:8090/searchit?name=Batman'
grep -E 'ComicVine|Comicvine' /var/lib/mylar3/logs/mylar.log | tail -4
实测回显(HTTP 响应为空,错误只体现在服务日志):
27-Oct-2026 17:55:26 - WARNING :: CP Server Thread-4 : mb.py:findComic:142 : You have not specified your own ComicVine API key - this is a requirement. Get your own @ http://api.comicvine.com.
27-Oct-2026 17:55:26 - ERROR :: CP Server Thread-4 : webserve.py:searchit:1178 : Unable to retrieve results from ComicVine: 'NoneType' object is not iterable
27-Oct-2026 17:55:26 - ERROR :: CP Server Thread-4 : webserve.py:searchit:1180 : You NEED to set a ComicVine API key prior to adding anything. It's Free - Go get one!
结论:没有 Key 时「添加系列」不可用,界面不会给出友好提示,只有空结果 + 日志报错。Key 需在 [CV] 节配置:
[CV]
comicvine_api = 你的32位ComicVineKey
cvapi_rate = 2
⚠️ 注意:ComicVine Key 属于第三方凭据,不要写进代码仓库或文档;生产环境建议用环境变量注入或在部署时临时写入
config.ini,并在共享截图中打码。
七、反向代理(可选,Nginx)
Mylar3 自带 HTTP 服务,直接暴露 8090 也能用;如果需要统一 80/443 入口、加 TLS 或转发到域名,可在同机加一层 Nginx。
7.1 安装 Nginx
apt-get install -y nginx
nginx -v
实测回显:
nginx version: nginx/1.18.0 (Ubuntu)
7.2 站点配置
server {
listen 80;
server_name comic.example.com;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
配置逐项说明:proxy_pass 指向本机 8090;三个 X- 头用于让 Mylar3 与后续日志拿到真实客户端 IP 与协议;Host 透传保证页面里的绝对链接正确。
启用站点并检查语法:
ln -sf /etc/nginx/sites-available/mylar3.conf /etc/nginx/sites-enabled/mylar3.conf
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl restart nginx
实测回显:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
7.3 经代理访问验证
curl -s -H 'Host: comic.example.com' -o /dev/null -w 'anon=%{http_code}\n' http://127.0.0.1/
curl -s -u admin:q1w2e3r4 -H 'Host: comic.example.com' -o /dev/null -w 'auth=%{http_code}\n' http://127.0.0.1/
curl -s -u admin:q1w2e3r4 -H 'Host: comic.example.com' http://127.0.0.1/home | grep -o '<title>[^<]*'
实测回显:
anon=401
auth=302
<title>Mylar - Home
auth=302 是登录后首页跳转 /home 的正常表现;带凭据直接取 /home 返回 200 与页面标题。
⚠️ 注意:Mylar3 的认证是 HTTP Basic,反向代理转发时必须保留
Authorization头(Nginx 默认会保留)。若再叠加一层带认证的网关,注意不要重复弹认证框。
八、方案对比与选择建议
安装 Mylar3 实际只有「源码部署」一条技术路线,差别在获取方式与依赖管理。下表对比常见三种落地方式(本文实测的是方案 A):
| 方案 | 获取方式 | 依赖管理 | 升级方式 | 适用场景 | 实测状态 |
|---|---|---|---|---|---|
| A:tar.gz + venv(本文) | 官方 tag 包 + 哈希校验 | venv 隔离 | 换代码目录 + 保留数据目录 | 生产、可复现、离线可打包 | 已实测 |
| B:git clone + venv | git clone 仓库 | venv 隔离 | git fetch 切 tag | 想跟分支/回滚方便 | 未单独实测(同一份代码) |
| C:发行版打包/第三方脚本 | 系统包或社区脚本 | 系统 Python | 随包管理器 | 快速试用 | 未实测 |
选择建议:生产环境选 A,因为发布件带固定 tag 与哈希,升级可控、审计清晰;需要频繁跟进小版本时选 B;方案 C 的包维护滞后且可能改动系统 Python 依赖,不建议用于长期运行。
九、配置说明(最小可用集)
完整参数见 《Mylar3 0.8.3 配置参数详解》。本节只列「装完必须改」的几项,确保开箱后能真正工作。config.ini 位于 /var/lib/mylar3/config.ini,手工修改后需重启服务生效。
| 节 | 键 | 本次实测值 | 作用 |
|---|---|---|---|
[General] | destination_dir | /mnt/comics(示例) | 漫画库根目录,后处理最终落点 |
[General] | create_folders | True | 自动建系列目录 |
[CV] | comicvine_api | 未配置 | ComicVine Key,必填 |
[Providers] | provider_order | 空 | 索引器顺序,需按实际索引器填写 |
[Client] | nzb_downloader | 3(默认) | 0=SABnzbd、1=NZBGet、2=Blackhole、3=未启用 |
[Client] | torrent_downloader | 0(默认) | 0=监视目录、1=uTorrent、2=rTorrent、3=Transmission、4=Deluge、5=qBittorrent |
[Interface] | http_port / http_host | 8090 / 0.0.0.0 | 监听端口与地址 |
[Interface] | http_username / http_password | admin / q1w2e3r4 | 演示认证凭据 |
[Interface] | authentication | 1 | 1=开启 Basic 认证 |
[API] | api_enabled / api_key | True / 32 位串 | REST API 开关与密钥 |
Scheduler] | search_interval | 1440 | 自动搜索间隔(分钟) |
配置修改后的重启与验证:
systemctl restart mylar3
systemctl is-active mylar3
实测回显:
active
十、常见问题
10.1 启动日志出现「language detected as non-English (C)」
现象:首次前台启动时打印:
language detected as non-English (C). Forcing specific logging module - errors WILL NOT be captured in the logs
原因:服务端 LANG 未设置,Mylar3 判定为非英文环境后强制切换日志模块,副作用是部分异常不会写入日志文件。解决:在 systemd 单元加 Environment=LANG=C.UTF-8 后重启。实测该行不再出现,systemctl restart 后日志直接进入正常启动序列。
10.2 Python 3.12 下大量 SyntaxWarning
现象:首次运行 --help 或启动时刷出数百行:
/opt/mylar3/mylar/helpers.py:225: SyntaxWarning: invalid escape sequence '\/'
原因:源码里的正则字符串使用了非法的转义序列(如 \/、\$),Python 3.12 会告警提示将来版本可能报错。属上游代码风格问题,不影响功能。若嫌日志噪音大,可在启动参数加 -q(关闭控制台日志)或把警告重定向,但不要为此改源码。
10.3 端口冲突
现象:重复启动时出现:
Failed to start on port: 8091. Is something else running?
原因:上一次进程尚未完全退出(Mylar3 的关闭流程需要数秒清理调度器与队列)。处理:systemctl stop mylar3 后等待 is-active 变为 inactive,或 ss -ltnp | grep 809x 确认端口释放后再启动。
10.4 周榜任务在 2026 年抛异常
现象:启动后后台任务报错:
Job "Weekly Pullist (trigger: interval[4:00:00], next run at: 2026-10-27 21:54:19 UTC)" raised an exception
Traceback (most recent call last):
File "/opt/mylar3/mylar/weeklypull.py", line 73, in pullit
weekly_info = helpers.weekly_info()
File "/opt/mylar3/mylar/helpers.py", line 3164, in weekly_info
startweek = stweek + timedelta(weeks = weeknumber)
TypeError: unsupported type for timedelta weeks component: str
原因:weekly_info() 对非 2025 年份使用 strftime("%U") 取周号,返回字符串,随后参与 timedelta(weeks=weeknumber) 运算时类型不匹配。属源码年份特判遗留缺陷。规避:启动参数加 -w(跳过启动时的周榜检查),实测加上后不再触发该任务;周榜页面数据仍会按调度周期尝试刷新,失败只影响「本周新刊」展示,不影响订阅与下载。
10.5 执行维护子命令报 str/bytes 错误
现象:maintenance -fs 报:
TypeError: can only concatenate str (not "bytes") to str
maintenance -xj 报:
TypeError: a bytes-like object is required, not 'str'
原因:maintenance.py 中 os.sep.encode('unicode-escape') 与二进制方式写 JSON 的写法在 Python 3 上类型不匹配,3.12 下必现。影响范围仅 -fs(修路径双斜杠)与 -xj(导出 ComicID 清单);-cp(清空 provider 表)实测正常。日常备份/恢复不受影响(见 《Mylar3 0.8.3 常用 CLI 与运维命令详解》)。
10.6 pip 安装依赖缓慢或超时
现象:pip install -r requirements.txt 长时间卡在下载。处理:换国内 PyPI 源,例如:
/opt/mylar3/venv/bin/pip install -r /opt/mylar3/requirements.txt \
-i https://pypi.tuna.tsinghua.edu.cn/simple
本次实测 PyPI 官方源可直连,未发生该问题;此命令为备用渠道写法。
十一、卸载与清理
需要彻底移除时按「停服务 → 删单元 → 删目录 → 删用户」顺序执行,避免残留进程占用 8090。
systemctl disable --now mylar3
rm -f /etc/systemd/system/mylar3.service
systemctl daemon-reload
rm -rf /opt/mylar3
rm -rf /var/lib/mylar3
rm -rf /var/log/mylar3
userdel -r mylar
验证清理结果:
systemctl is-active mylar3 || echo "service removed"
ss -ltn | grep 8090 || echo "port free"
id mylar 2>/dev/null || echo "user removed"
实测回显:
inactive
port free
user removed
⚠️ 注意:
/var/lib/mylar3内含mylar.db与漫画库的索引关系,卸载前先备份;如果漫画文件本身放在独立磁盘(如/mnt/comics),删除数据目录不会动到漫画文件,但重新安装后需要重新扫描入库。