PyCryptoBot / 安装与运行方式

PyCryptoBot 安装:没有 pip 包,只能 clone 或跑容器

大多数 Python 项目的安装章节从 pip install 开始。PyCryptoBot 不是这样:它在 PyPI 上没有包——本站探测的四个候选名(pycryptobotpycryptobot-apipycryptobotlibpy-crypto-bot)全部返回 404,仓库根目录也没有 setup.pypyproject.toml 这类打包元数据。

所以你的起点只有两个:把仓库 clone 下来自己装依赖,或者直接用官方容器镜像。这两条路的前置条件完全不同,而且第二条路之所以更稳,原因写在 Dockerfile 里——它先用一个带 build-essential 的阶段把依赖编译好,再把产物复制进运行镜像。

这一页把四种运行方式、Dockerfile 里值得知道的细节、以及依赖钉子的编译风险逐项列出来。注意边界:本站没有实机跑完整安装,下面所有「需编译」「可直接装」的判断都来自 PyPI 上的轮子标签覆盖范围,不是本机安装日志。

无 PyPI 包Python 3.11.4(官方镜像)依赖跨度 2020–2023本站未实机安装
本文验证环境
  • PyCryptoBot v8.2.4(main=1fa9aaef,2024-03-04)
  • Python 3.11(官方 Dockerfile 基线)
  • 交易所范围:Binance / Coinbase / KuCoin
  • 验证日期 2026-09-21
  • 本站未实机运行机器人
git clone自己装依赖,需本地编译工具链
Docker 镜像官方镜像已编译好依赖,非 root 运行
docker-compose挂载配置与日志,失败自动重启
Helm chart仓库内 chart/ 目录,适合集群部署
四种运行方式示意(依据仓库 Dockerfiledocker-compose.yamlchart/ 目录整理,非官方安装指南)。四种方式共享同一份 config.json 结构,差别在前置条件与运维成本上。
安装前提

为什么这个项目不能 pip install?

先把事实摆出来,因为「装不上」和「以为装上了但其实是别的包」是两件不同的事。下表是本站对 PyPI 的探测结果与仓库打包元数据的核查。

观测项结果依据对你的影响
PyPI 包名 pycryptobot返回 404,不存在PyPI JSON API 探测pip install pycryptobot 会直接失败,不会装到任何东西
PyPI 包名 pycryptobot-api返回 404同上——
PyPI 包名 pycryptobotlib返回 404同上——
PyPI 包名 py-crypto-bot返回 404同上——
仓库打包元数据根目录没有 setup.py、没有 pyproject.toml、也没有 requires_python 声明仓库文件清单项目没有「可上传的发行物」,这不是遗漏安装说明,而是它本来就不走包管理器
官方实际分发形态源码(git 标签 8.2.0–8.2.4)+ 容器镜像GitHub Tags API + docker-compose.yaml你的安装动作只能是 clone 或 pull 镜像
与「有 PyPI 包的项目」对比那类项目一条命令装完;本项目要先取源码、再装依赖、再准备配置——选型时要把这段额外成本算进去
探测范围的边界:本站只核了上面这 4 个名字,不能据此断言「PyPI 上绝对没有任何相关包」。但可以确定的是:仓库没有打包元数据,所以任何第三方同名包都不等于这个项目本身。如果你的目标就是用它,请以仓库源码或官方镜像为准,不要装来路不明的同名包。
运行方式

四种落地方式的前置条件差在哪?

「能跑起来」和「能长期稳定地跑」是两件事。下表按前置条件与运维成本排序,最后两行是仓库里已提供说明文档的两条常驻路径。

方式前置条件适合谁注意点
git clone + pip install -r requirements.txt本机有 Python 3.11 与可用的 C 编译工具链想改源码、加自定义策略、做二次开发的人三个钉子依赖没有 cp311 轮子,必须现场编译,见下方依赖表
官方容器镜像 ghcr.io/whittlem/pycryptobot/pycryptobot:latest装好 Docker 即可只想尽快跑起来、不想碰依赖的人镜像里依赖已编译好;注意 :latest 是浮动标签,版本需自己记录
docker-compose.yamlDocker Compose单机跑一个到多个币对挂载 config.jsonpycryptobot.loggraphs/ 三个路径;重启策略是 condition: on-failure
Helm chart(chart/ 目录)可用的 Kubernetes 集群与 Helm已经在用集群管理服务的团队模板里含 deployment / secret / configmap / serviceaccount,说明作者考虑过把密钥放进 Secret 管理
systemd 常驻服务Linux 主机与 systemd想用系统级进程守护、不引入容器的场景仓库 docs/ 下有专门的 systemd 配置文档,按它的写法做比自制脚本稳
单独跑 Telegram 机器人进程已有一份能运行的配置需要手机端远程查看与控制compose 文件里这段是注释状态的示例块,entrypoint 改成 telegram_bot.py,需要自己取消注释
单独跑 Web Portal 进程同上级,另需映射端口想在浏览器里看状态同样是注释块,映射端口 5000:5000;不要把它暴露到公网

为什么容器路线更省事

不是因为容器更先进,而是因为官方镜像已经把编译这一步做完了。你在本机 clone 之后要自己面对那份 2020–2023 年的依赖钉子;镜像里已经是一个构建成功的产物。代价是镜像标签浮动、你对内部依赖版本的控制力更弱。

为什么多币对要考虑目录隔离

compose 文件里给出的模板是「一个币对一个服务块」,每个块挂载自己的 config.json 与日志文件。如果你的计划是同一账户跑多个币对,先把这份目录结构定下来,否则排查时很难分清哪个进程写了哪条日志。

为什么别把控制面暴露到公网

Telegram 机器人与 Web Portal 都具备操作账户的能力(买入、卖出、启停)。它们的配置项里有授权用的用户 ID 与令牌,一旦端口开放到公网,等于把下单入口挂在互联网上。部署时优先考虑只在内网或经隧道访问。

镜像细节

Dockerfile 里有哪八个细节值得知道?

这一节不需要你改任何东西,但它解释了「为什么容器路线更稳」,也解释了「为什么裸机会卡住」。逐条对照你自己环境里的条件。

细节具体做法为什么重要你要注意什么
两阶段构建先用编译镜像装依赖,再把成品复制进运行镜像编译器与构建缓存不会留在最终镜像里,体积更小你自己做镜像时不要省掉这一步
基础镜像版本两个阶段都用 python:3.11.4-slim-bullseye这是官方验证过的 Python 版本组合用别的 Python 版本会改变依赖轮子是否可用的判断
编译工具链编译阶段安装 build-essential那三个没有 cp311 轮子的依赖会在这里被现场编译这就是裸机失败、容器成功的关键差异
运行期系统库运行阶段装 libatlas3-baselibfreetype6libjpeg62-turbolibopenjp2-7libtiff5libxcb1绘图与数值库在运行时需要这些共享库自己精简镜像时删掉它们会导致出图或数值计算报错
额外索引源构建时设置 extra-index-url 指向 piwheels在 ARM 设备上能拿到预编译包,明显减少编译时间说明作者考虑过树莓派一类低功耗设备上的部署
非 root 运行建立 UID/GID 都为 1000pycryptobot 用户并 USER pycryptobot容器内进程不再拥有 root 权限挂载宿主机目录时要确认该 UID 有读写权限,否则日志写不进去
绘图配置目录设置 MPLCONFIGDIR=/app/.config/matplotlib 并预先建好目录非 root 用户没有可写的 home,绘图库初始化会失败这类报错看起来与交易无关,但会直接中断进程
启动命令ENTRYPOINT ["python3", "-u", "pycryptobot.py"]-u 关闭输出缓冲,日志实时可见你要跑别的入口脚本,需要覆盖 entrypoint 而不是追加参数
一句话总结这一节:官方镜像之所以是你的省事路径,是因为它把「编译依赖 + 补齐运行库 + 建非 root 用户 + 处理绘图目录」这四件事都做完了。这四件事恰好是裸机部署最常卡住的地方。
依赖与编译

依赖钉子清单是什么?编译风险在哪

requirements.txt 里的版本横跨 2020 到 2023 年。判断「能不能装上」的关键不是版本新不新,而是这个版本有没有为你所用的 Python 版本预编译好的轮子。下表逐个核对了轮子覆盖范围。

依赖(钉子版本)PyPI 上传日期是否有 cp311 轮子结论与注意点
pandas==1.5.12022-10-19(该版本共 26 个 wheel,含 cp311)可直接安装,是这份清单里少见的现代组合
matplotlib==3.3.32020-11-12(标签只到 cp39)Python 3.11 下必须本地编译;这类老版本在较新的编译链上失败率较高
pyyaml==5.3.12020-11-19(标签只到 cp39)同样需要编译;YAML 解析是配置读取的必经路径,装不上就直接跑不起来
websockets==9.12021-05-27(标签只到 cp39)需要编译;只在启用 websocket 实时行情时才会真正用到
requests==2.31.02023-05-22纯 Python 通用包可直接安装,无编译环节
websocket-client==0.59.02021-05-05纯 Python 通用包可直接安装;版本较老,注意与上一个包并存时的行为差异
python-telegram-bot==13.72021-07-01纯 Python 通用包可直接安装;只在你使用 Telegram 控制面时才会加载
responses==0.13.3 / mock==4.0.32021-04-27 / 2020-12-10纯 Python 通用包测试用依赖,生产环境可以不放
另一类依赖状态影响你要注意什么
pandas-tanumpyflasktradingview-tabottleneck写在 requirements 里但未钉版本每次安装解析到的版本可能不同,行为随时间漂移要复现别人的结果,必须自己 pip freeze 存档
dashdash-daqdash-bootstrap-components未钉版本Web GUI 与 Dash 生态耦合紧密,大版本升级可能打断界面只在用 Web GUI 时需要;不用可以不管
richregexcodespell未钉版本rich 承担终端彩色输出;codespell 是开发期拼写检查开发期依赖,生产环境非必需
必须说清楚的验证边界:上表的「有 / 无 cp311 轮子」来自对 PyPI 各版本发行文件的标签核查,不是本机的安装日志。本站没有实机执行完整安装流程,因此这里给出的是「哪些步骤大概率需要编译工具链」的判断,而不是「装过并成功」的结论。请在你的环境里自行验证一次。
上手步骤

从零到能启动有哪六步?为什么第一步不要开 live

下面每一步都给出要执行的命令、它在做什么,以及你应该看到什么。任何一步的预期输出对不上,先停下核对,不要继续往下走——尤其是最后两步。

  1. 取到代码:clone 或用镜像

    命令:git clone https://github.com/whittlem/pycryptobot.git,或 docker pull ghcr.io/whittlem/pycryptobot/pycryptobot:latest
    说明:这一步之后你就已经处在「2024-03 主线」这个版本上了,版本状态见版本与分支现状
    预期输出:目录里能看到 pycryptobot.pyconfig.json.samplerequirements.txtDockerfile 这几个文件。

  2. 生成配置:从样本复制,不要手写

    命令:复制 config.json.sampleconfig.json(进阶项再参考 config.json.advanced.sample)。
    说明:样本里已经包含各交易所的 api_url 与约 30 个开关,从它改起比从空文件写起少踩很多键名错误。
    预期输出:config.json 里能看到 binance / coinbase / coinbasepro / kucoin 四个区块与一个 telegram 区块。

  3. 装依赖:容器路线跳过本步

    命令:容器路线 docker build -t pycryptobot .;裸机路线 python -m pip install -r requirements.txt
    说明:裸机路线会现场编译缺少轮子的那几个依赖,需要本机有 C 编译工具链。
    预期输出:容器路线构建成功;裸机路线安装无报错。若在这一步失败,先怀疑编译工具链而不是代码。

  4. 第一次运行:确认 live 是 0

    命令:容器路线 docker run --rm -v "$PWD/config.json:/app/config.json" pycryptobot;裸机路线 python3 pycryptobot.py
    说明:样本配置里 live 默认为 0,也就是不下真实订单。这一步的目的是看它能连上行情、能算出指标,而不是看它赚钱。
    预期输出:日志里出现当前价格、指标状态与「等待 / 买入 / 卖出」判断,且没有真实下单记录

  5. 观察若干周期,确认信号会变

    命令:保持上一步运行,观察日志随周期推进的变化;也可临时开启 graphs 生成图表辅助判断。
    说明:如果连续多个周期指标都不变化,先查配置里的 granularity 是否符合你的预期,再查数据是否取到。
    预期输出:日志中的指标值与判断随新 K 线出现而变化。

  6. 接上通知,再决定是否上实盘

    命令:按通知与控制面配置 Telegram 或 Web 界面,并单独一个进程启动它。
    说明:先用只读监控的方式观察一段时间,再考虑开 live
    预期输出:手机或浏览器能看到机器人状态;此时账户仍然没有被下单。

把「第一次不要开 live」当成硬规则。这个机器人的设计是「按你给定的规则自动下单」,它不会替你判断规则本身是否合理。在你看过若干周期的日志、确认信号触发符合你的预期之前,让它保持 live=0。上线前要逐项核对的内容见实盘运维与安全
FAQ

关于安装与运行方式的高频问题

回答依据仓库文件与 PyPI 元数据核查;涉及你本机环境的判断需要自行验证一次。

没有 PyPI 包,那我到底该怎么装?

两条路。第一条是 git clone 仓库后执行 python -m pip install -r requirements.txt,这条路的代价是要在本机编译三个没有 cp311 轮子的依赖(matplotlib==3.3.3pyyaml==5.3.1websockets==9.1)。第二条是直接用官方容器镜像,镜像里依赖已经编译好。如果你只是想把它跑起来,第二条路的前置条件更少。

我在 Windows 上,没有 C 编译器怎么办?

最直接的办法是走容器路线,绕开本机编译。如果必须在 Windows 上裸机跑,你需要自己准备能编译 C 扩展的工具链,并且要接受那份 2020–2023 年的依赖钉子在新工具链上可能编译失败。本站没有在 Windows 上实机验证过这条路,所以不给具体的安装步骤建议——请以你实际执行的结果为准。

官方镜像可以直接用于长期运行吗?

镜像本身是官方发布物,可以用。但要注意两件事:一是 docker-compose.yaml 里引用的标签是 :latest,属于浮动标签,版本会随上游变化,长期运行建议把用到的具体镜像摘要记录下来;二是镜像不能替你处理配置与密钥,config.json 和密钥文件都是你要自己挂载进去的。

依赖版本这么老,会不会有问题?

要分两类看。第一类是被钉死的版本(如 matplotlib==3.3.3),风险主要出现在安装阶段——缺少对应 Python 版本的预编译轮子时就要现场编译。第二类是没钉版本的包(如 pandas-tanumpydash 系列),风险出现在运行阶段——不同时间安装会解析到不同版本,行为可能漂移。要复现结果就必须自己 pip freeze 存档。

需要装 talib 吗?

不需要,它是可选的。仓库的 CHANGELOG 里说明 talib 需要额外的系统级安装,因此没有放进任何 requirements 文件,属于完全可选项;如果你确实装好了,它会被自动加载。同一份记录里还提到另一个文件 requirements-advanced.txt 是给需要 pandas-ta 的场景用的。既然默认清单已经包含 pandas-ta,多数人不需要额外处理这一项。

为什么配置文件有两个样本?

config.json.sample 是基础样本,config.json.advanced.sample 在里面额外加入了一批进阶开关,例如动态追踪止损相关的一整组参数、preventloss 系列、以及启用自定义策略与 pandas-ta 的开关。建议的用法是先跑通基础样本,确认信号行为符合预期后,再逐一加入进阶项并记录每次改动。配置参考页把两组开关按功能分了类。

本站把这些结论验证到了什么程度?

只到「读源码与读元数据」这一层。具体来说:PyPI 的 404 与轮子覆盖是接口探测结果;Dockerfiledocker-compose.yamlrequirements.txt 的内容是文件原文;章节目录结构来自仓库文件清单。本站没有实机执行完整安装,也没有跑过机器人、没有连接过任何交易所账户、没有下过任何订单。请把这一页当作安装前的风险清单,而不是安装手册。

下一步:先把约 30 个配置开关看懂,再决定改哪几个?

装得上只是第一步。样本配置里有约三十个开关,其中买入过滤、卖出风控、仓位规模三大类会直接改变机器人的行为,配置参考页把它们按功能分了组。