本篇作者向华是一名游戏行业从业者,也是 Perforce Helix Core(P4V)用户。
本文内容中存在长命令行,横屏观看更佳。
最近在一台新 MacBook 上部署 P4 工具链,发现 P4Python 库怎么也安装不上。
$ pip3 install p4python
Collecting p4python
Using cached p4python-2021.1.2128019.tar.gz (83 kB)
Building wheels for collected packages: p4python
Building wheel for p4python (setup.py) ... error
ERROR: Command errored out with exit status 1:
...
...
copying P4.py -> build/lib.macosx-10.14-x86_64-3.8
running build_ext
***********************************************
** Cannot build P4Python without SSL support **
***********************************************
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/..../p4python/setup.py", line 475, in <module>
do_setup()
...
...
File "/private/..../p4python/setup.py", line 292, in run
raise Exception("Parameter --ssl is needed")
Exception: Parameter --ssl is needed
----------------------------------------
ERROR: Failed building wheel for p4python
Running setup.py clean for p4python
Failed to build p4python
...
...
WARNING: You are using pip version 20.2.3;
however, version 22.0.3 is available.
You should consider upgrading via the
'/Library/Developer/CommandLineTools/usr/bin/python3 -m
pip install --upgrade pip' command.
复制代码
因为在另一台 Mac Mini 上是可以安装成功的。
之前成功安装的 Mac 最新也就是 macOS Big Sur,直觉告诉我应该是这台 MacBook 的系统太新了,因为它的系统是当前最新的 macOS Monterey。
但我觉得应该可以尝试解决一下,毕竟这属于 Python 库范畴的问题,先不急着下定论。
先看看官方文档怎么说
从 Perforce 官网可以看到两篇关于 p4python 和 ssl 的文档。
Installing p4python
https://www.perforce.com/manuals/p4python/Content/P4Python/python.installation.html
Compiling P4Python with SSL support
https://community.perforce.com/s/article/3728
文档中有提到,在 2019.1 版本之后,是需要安装 OpenSSL 的库的。
第二篇文档中是用 p4python 源码编译的教学,计划作为最后一招。
再看看别人怎么说
网上搜到一个方法:
pip3 install --install-option="--ssl" p4python
复制代码
报错:
error: option --ssl not recognized
复制代码
又看到另一个说法,Python 版本不对,OK,那调整下 Python 版本试试。
手边儿在 Linux 上成功安装的 Python 版本有 3.7.7、3.8.2、3.10.2,当前本机的 Python 版本是 3.8.9。
尝试换 Python 版本,安装 pyenv
试试 3.7.7
安装时,报 sendfile 报错。
Last 10 log lines:
./Modules/posixmodule.c:9197:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
ret = sendfile(in, out, offset, &sbytes, &sf, flags);
复制代码
再试安装 3.8.2。
同样报 sendfile 报错。
灰心哥内心 OS:难道都不能换 Python 版本了?
最后一试:
安装成功。
速度切换 local 为 3.10.2。
使用 Python 3.10.2 对应的 pip3 ( pip version 21.2.4 ) 安装一下 p4python。
令人失望,同样报 ssl 错误。
不折腾 Python 版本了,尝试换种姿势安装 p4python。
Perforce 官网下载 whl。
pip3 install p4python-2021.1.2128019-cp39-cp39-macosx_10_12_universal2.whl
复制代码
仍旧报一样的错,想想也是,虽然是 wheel,但它跟 pip 安装,本质上是一样的。
Warning! 最后一击
折腾半天,应该只能按照官方文档来做一次源码编译了,并且都不知道是否有其他 dependency 的问题。
承接上文,注意到 WARNING 提到 pip 版本是 20.2.3,有新版本 22.0.3。
事到如今,没办法了,更一发试试!
$ /Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip
Defaulting to user installation because normal site-packages is not writeable
Collecting pip
Downloading pip-22.0.3-py3-none-any.whl (2.1 MB)
|████████████████████████████████| 2.1 MB 583 kB/s
Installing collected packages: pip
WARNING: The scripts pip, pip3 and pip3.8 are installed in
'/Users/jasonxiang/Library/Python/3.8/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning,
use --no-warn-script-location.
Successfully installed pip-22.0.3
复制代码
再安装 p4python 试试。
$ pip3 install p4python
Successfully installed p4python-2021.1.2128019
复制代码
神 ~ 奇 ~ 地 ~ 成 ~ 功 ~ 了!
值得一提的是,pip v22.x.x 版本安装库时,还会有个彩色进度条和彩色安装速率,似乎也在表达一种庆祝
感谢阅读。
你好,我是向华。
前原神项目 P4 Admin,持续集成开发者,8 年游戏测试开发工程师。
评论