没有什么比现成的解决方案更香的了 - P4Python 玩家速看(用户文章转载)
最近在一台新 MacBook 上部署 P4 工具链,发现 P4Python 库怎么也安装不上。
$ pip3 install p4pythonCollecting 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 runraise Exception("Parameter --ssl is needed")Exception: Parameter --ssl is needed----------------------------------------ERROR: Failed building wheel for p4pythonRunning 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 -mpip install --upgrade pip' command.
因为在另一台 Mac Mini 上是可以安装成功的。
之前成功安装的 Mac 最新也就是 macOS Big Sur,直觉告诉我应该是这台 MacBook 的系统太新了,因为它的系统是当前最新的 macOS Monterey。
但我觉得应该可以尝试解决一下,毕竟这属于 Python 库范畴的问题,先不急着下定论。
先看看官方文档怎么说
从 Perforce 官网可以看到两篇关于p4python 和 ssl 的文档。
文档中有提到,在 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
brew install pyenv
试试 3.7.7
pyenv install 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);
pyenv install 3.10.2
安装成功。
速度切换 local 为 3.10.2。
pyenv 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 安装,本质上是一样的。
折腾半天,应该只能按照官方文档来做一次源码编译了,并且都不知道是否有其他 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 writeableCollecting pipDownloading pip-22.0.3-py3-none-any.whl (2.1 MB)|████████████████████████████████| 2.1 MB 583 kB/sInstalling 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 p4pythonSuccessfully installed p4python-2021.1.2128019
值得一提的是,pip v22.x.x 版本安装库时,还会有个彩色进度条和彩色安装速率,似乎也在表达一种庆祝
感谢阅读。


