prophet 安装及相关问题

没想到坑那么多 …

背景

Prophet 是一个时间序列预测库,可以结合 Prometheus 监控数据来实现异常检测。在安装的过程中遇到了一些问题,这里记录一下。

Linux 内核版本为 4.14.0_1-0-0-44,编译器版本为 gcc12 ,公司的 centos 物理机。

Python 版本为 3.11.2。

安装

1
2
3
4
5
6
7
8
# 创建虚拟环境
mkdir venv && python3 -m venv venv/

# 激活环境
source venv/bin/activate

# 安装最新的 prophet 1.1.7;配置镜像的步骤省略
python -m pip install prophet

安装的非常顺利:

第一阶段的问题 - so 相关

运行一下官网的 python demo :https://facebook.github.io/prophet/docs/quick_start.html#python-api

1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
from prophet import Prophet
import os

# 物理机无法访问外网,这里将 csv 下载到本地
df = pd.read_csv('test.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=365)
print(future.tail())

forecast = m.predict(future)
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())

执行报错,看日志,貌似是一些 so 的版本不太对,于是我灵机移动,在执行 python 前,将 /opt/compiler/gcc-12/lib64 赋给环境变量 LD_LIBRARY_PATH,因为这个目录下的 so 中,GLIBCXX等版本是正确的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
python prophet_demo.py
Importing plotly failed. Interactive plots will not work.
19:29:49 - cmdstanpy - INFO - Chain [1] start processing
19:29:49 - cmdstanpy - INFO - Chain [1] done processing
19:29:49 - cmdstanpy - ERROR - Chain [1] error: error during processing Operation not permitted
Optimization terminated abnormally. Falling back to Newton.
19:29:49 - cmdstanpy - INFO - Chain [1] start processing
19:29:49 - cmdstanpy - INFO - Chain [1] done processing
19:29:49 - cmdstanpy - ERROR - Chain [1] error: error during processing Operation not permitted
Traceback (most recent call last):
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/models.py", line 126, in fit
self.stan_fit = self.model.optimize(**args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/cmdstanpy/model.py", line 659, in optimize
raise RuntimeError(msg)
RuntimeError: Error during optimization! Command '/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin random seed=70506 data file=/tmp/tmp4ozy3e70/qzkq0mvq.json init=/tmp/tmp4ozy3e70/rdq_mchp.json output file=/tmp/tmp4ozy3e70/prophet_modele99luik2/prophet_model-20250721192949.csv method=optimize algorithm=lbfgs iter=10000' failed: console log output:

/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/../../prophet.libs/libtbb-ff323302.so.2)


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/demo/prophet_demo.py", line 7, in <module>
m.fit(df)
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/forecaster.py", line 1235, in fit
self.params = self.stan_backend.fit(stan_init, dat, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/models.py", line 133, in fit
self.stan_fit = self.model.optimize(**args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/cmdstanpy/model.py", line 659, in optimize
raise RuntimeError(msg)
RuntimeError: Error during optimization! Command '/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin random seed=91117 data file=/tmp/tmp4ozy3e70/2vfua9wg.json init=/tmp/tmp4ozy3e70/ia0ckk5s.json output file=/tmp/tmp4ozy3e70/prophet_modeltkkfdtby/prophet_model-20250721192949.csv method=optimize algorithm=newton iter=10000' failed: console log output:

/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin)
/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/../../prophet.libs/libtbb-ff323302.so.2)

将 gcc12 的 so 加到 LD_LIBRARY_PATH 后,又引入了新的问题,看报错,貌似是系统命令 hostname执行的有问题了,单独执行 hostname 也有问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 添加 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/compiler/gcc-12/lib64; python prophet_demo.py
Importing plotly failed. Interactive plots will not work.
19:34:15 - cmdstanpy - INFO - Chain [1] start processing
19:34:15 - cmdstanpy - INFO - Chain [1] done processing
19:34:15 - cmdstanpy - ERROR - Chain [1] error: program not found Key has expired
Optimization terminated abnormally. Falling back to Newton.
19:34:15 - cmdstanpy - INFO - Chain [1] start processing
19:34:15 - cmdstanpy - INFO - Chain [1] done processing
19:34:15 - cmdstanpy - ERROR - Chain [1] error: program not found Key has expired
Traceback (most recent call last):
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/models.py", line 126, in fit
self.stan_fit = self.model.optimize(**args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/cmdstanpy/model.py", line 659, in optimize
raise RuntimeError(msg)
RuntimeError: Error during optimization! Command '/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin random seed=88603 data file=/tmp/tmpgd3ywh09/p3bys8ef.json init=/tmp/tmpgd3ywh09/uny1xj4p.json output file=/tmp/tmpgd3ywh09/prophet_modelo5mu53fn/prophet_model-20250721193415.csv method=optimize algorithm=lbfgs iter=10000' failed: console log output:

/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: relocation error: /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/../../prophet.libs/libtbb-ff323302.so.2: symbol pthread_self, version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time reference


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/demo/prophet_demo.py", line 7, in <module>
m.fit(df)
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/forecaster.py", line 1235, in fit
self.params = self.stan_backend.fit(stan_init, dat, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/models.py", line 133, in fit
self.stan_fit = self.model.optimize(**args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/cmdstanpy/model.py", line 659, in optimize
raise RuntimeError(msg)
RuntimeError: Error during optimization! Command '/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin random seed=49804 data file=/tmp/tmpgd3ywh09/gf51_5a_.json init=/tmp/tmpgd3ywh09/pe6h7_ch.json output file=/tmp/tmpgd3ywh09/prophet_modelqbc6p57a/prophet_model-20250721193415.csv method=optimize algorithm=newton iter=10000' failed: console log output:

/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: relocation error: /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/../../prophet.libs/libtbb-ff323302.so.2: symbol pthread_self, version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time reference

hostname: relocation error: /opt/compiler/gcc-12/lib64/libc.so.6: symbol __tunable_get_val, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference

对上述两个错误重新分析了一下,发现第一个 so 版本的问题,是在调用 fit函数的时候出现,而 hostname的问题是在 Prophet 初始化的时候出现的,那么可以尝试在这两个阶段之间,完成 LD_LIBRARY_PATH 的设置,也即:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
from prophet import Prophet
import os

df = pd.read_csv('test.csv')
# 这里 LD_LIBRARY_PATH 不能有 /opt/compiler/gcc-12/lib64
# 否则执行 hostname 会出错
m = Prophet()

# add env here
os.environ['LD_LIBRARY_PATH'] = "/opt/compiler/gcc-12/lib64"

# 这里需要 LD_LIBRARY_PATH 为 /opt/compiler/gcc-12/lib64
# 否则相关 so 会有问题
m.fit(df)
future = m.make_future_dataframe(periods=365)
print(future.tail())

forecast = m.predict(future)
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())

执行到 fit 时又出现了新的错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
python prophet_demo.py
Importing plotly failed. Interactive plots will not work.
19:43:47 - cmdstanpy - INFO - Chain [1] start processing
19:43:47 - cmdstanpy - INFO - Chain [1] done processing
19:43:47 - cmdstanpy - ERROR - Chain [1] error: program not found Key has expired
Optimization terminated abnormally. Falling back to Newton.
19:43:47 - cmdstanpy - INFO - Chain [1] start processing
19:43:47 - cmdstanpy - INFO - Chain [1] done processing
19:43:47 - cmdstanpy - ERROR - Chain [1] error: program not found Key has expired
Traceback (most recent call last):
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/models.py", line 126, in fit
self.stan_fit = self.model.optimize(**args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/cmdstanpy/model.py", line 659, in optimize
raise RuntimeError(msg)
RuntimeError: Error during optimization! Command '/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin random seed=64632 data file=/tmp/tmp_pkg1rff/_3qzb1mj.json init=/tmp/tmp_pkg1rff/l71h7sge.json output file=/tmp/tmp_pkg1rff/prophet_modelh6asj7xn/prophet_model-20250721194347.csv method=optimize algorithm=lbfgs iter=10000' failed: console log output:

/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: relocation error: /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/../../prophet.libs/libtbb-ff323302.so.2: symbol pthread_self, version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time reference


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/demo/prophet_demo.py", line 15, in <module>
m.fit(df)
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/forecaster.py", line 1235, in fit
self.params = self.stan_backend.fit(stan_init, dat, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/models.py", line 133, in fit
self.stan_fit = self.model.optimize(**args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/cmdstanpy/model.py", line 659, in optimize
raise RuntimeError(msg)
RuntimeError: Error during optimization! Command '/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin random seed=59974 data file=/tmp/tmp_pkg1rff/0xa3vaxp.json init=/tmp/tmp_pkg1rff/2jwipga8.json output file=/tmp/tmp_pkg1rff/prophet_modelkfh0isf9/prophet_model-20250721194347.csv method=optimize algorithm=newton iter=10000' failed: console log output:

/home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/prophet_model.bin: relocation error: /home/disk3/nizhenyang/dev/prom_prophet_search_v2/venv/lib/python3.11/site-packages/prophet/stan_model/../../prophet.libs/libtbb-ff323302.so.2: symbol pthread_self, version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time reference

也就是说,没有办法通过简单地设置 LD_LIBRARY_PATH 来解决这个问题。

第二阶段的问题 - prophet 依赖库 cmdstan

实际上在开始第二阶段前,我还尝试安装了多个低版本的 prophet 以及使用多个低版本的 python3,这两排列组合试了好几个小时,遇到了各种奇怪的问题,都走不通,已经汗流浃背了。

逼得没办法,重新对 prophet 的实现以及上述报错细节做了分析,发现主要是这个 prophet_model.bin的执行存在问题,而它是一个二进制程序,也就是说,它应该是在某一个阶段被编译出来的。翻了一下 prophet 的代码,发现是在 stepup.py 中执行的,也即是在打包阶段进行的。所以有可能是打包的环境和执行的环境有差异,而导致各种 so 版本存在问题。

在 prophet 的 README 中,提供了自己单独打包的方式,于是我决定自己打个包,也即本地重新编译 prophet_model.bin

执行的时候报错,看报错信息,是连接 github 存在问题。看了一下代码,在执行构建的时候,它会尝试去下载 cmdstan 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
python -m pip install -e .
# .....
20:03:48 - cmdstanpy - WARNING - CmdStan installation failed.
Version 2.33.1 cannot be downloaded. Connection to GitHub failed. Check firewall settings or ensure this version exists.
CmdStan installation failed.
Version 2.33.1 cannot be downloaded. Connection to GitHub failed. Check firewall settings or ensure this version exists.
Compiling cmdstanpy model
Installing cmdstan to /home/disk3/nizhenyang/dev/prom_prophet_search_v2/lib/prophet-main/python/prophet/stan_model/cmdstan-2.33.1
CmdStan install directory: /home/disk3/nizhenyang/dev/prom_prophet_search_v2/lib/prophet-main/python/prophet/stan_model
checking version 2.33.1 availability, retry (1/5)
checking version 2.33.1 availability, retry (2/5)
checking version 2.33.1 availability, retry (3/5)
checking version 2.33.1 availability, retry (4/5)
checking version 2.33.1 availability, retry (5/5)
Release 2.33.1 is unavailable from URL https://github.com/stan-dev/cmdstan/releases/download/v2.33.1/cmdstan-2.33.1.tar.gz
URLError: [Errno 101] Network is unreachable
# .....

文档里提到,通过设置 export PROPHET_REPACKAGE_CMDSTAN=False来使用本地的 cmdstan 。于是将 https://github.com/stan-dev/cmdstan/releases/download/v2.33.1/cmdstan-2.33.1.tar.gz下载至本地并解压,按照其中的 README 说的,执行 make build构建出对应的 bin:

1
make build -j40

这个 bin 已经有了,那么在 prophet 构建时与之关联呢?没找到相关的文档。我先尝试将这个 bin 加入到 PATH 中:

1
2
3
export PROPHET_REPACKAGE_CMDSTAN=False
export PATH=/home/disk3/nizhenyang/dev/prom_prophet_search_v2/lib/cmdstan-2.33.1/bin:$PATH
python -m pip install -e .

执行报错,说是找不到本地的 cmdstan :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# ...
20:24:31 - cmdstanpy - INFO - No CmdStan installation found.
Compiling cmdstanpy model
No CmdStan installation found.
No CmdStan installation found, run command "install_cmdstan"or (re)activate your conda environment!
20:24:31 - cmdstanpy - INFO - Cannot determine whether version is before 2.27.
Cannot determine whether version is before 2.27.
20:24:31 - cmdstanpy - INFO - No CmdStan installation found.
No CmdStan installation found.
No CmdStan installation found, run command "install_cmdstan"or (re)activate your conda environment!
20:24:31 - cmdstanpy - INFO - Cannot determine whether version is before 2.36.
Cannot determine whether version is before 2.36.
# ...
File "/tmp/pip-build-env-9b2a6yp2/overlay/lib/python3.11/site-packages/cmdstanpy/utils/cmdstan.py", line 170, in cmdstan_path
raise ValueError(
ValueError: No CmdStan installation found, run command "install_cmdstan"or (re)activate your conda environment!

按照报错捋了一下 cmdstan 的代码,发现它会通过环境变量 CMDSTAN来定义本地执行环境:

那么 prophet 的构建命令改成如下形式执行,编译成功了

1
2
3
4
5
# 使用本地的 cmdstan
export PROPHET_REPACKAGE_CMDSTAN=False
# 指定本地 cmdstan 的路径
export CMDSTAN=/home/disk3/nizhenyang/dev/prom_prophet_search_v2/lib/cmdstan-2.33.1
python -m pip install -e .

可以看到,prophet_model.bin出现了。

由于是使用同一个 venv 自行构建的,所以会使用最新的自行构建的 prophet :

重新执行 demo 脚本,没报错,并且不用在任何地方设置 LD_LIBRARY_PATH了。

总结

python 的第三方库,尤其是非公司内部的库,如果涉及到二进制 bin 执行的问题,可以尝试在本地自行进行构建。这种问题网上基本找不到答案。