【发布时间】:2020-01-16 19:14:46
【问题描述】:
我在 macOS 上,使用 brew、pyenv 和 virtualenv。
我有一个依赖于bokeh 和gdal 的Python 项目(这两个python 包都使用pip 在虚拟环境中安装)。 bokeh 和 gdal 都依赖于libopenssl 的系统版本,但它们依赖于不同的版本(1.0 和 1.1)。
我在过去的不同时间点让这个项目工作过,使用了一些库组合(对所有 python 包使用 pip,对系统包使用 brew),但是当我更改 python 版本和环境(使用 pyenv)以处理其他库时项目,然后回到这个项目,它不再有效。通常在为 openssl 找到共享库时遇到问题:
$ ./my_python_program.py
...
ImportError: dlopen(/Users/userBob/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so, 2):
Library not loaded: /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib
Referenced from: /Users/userBob/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so
Reason: image not found
我觉得我最终能够通过尝试使用 pip 和 brew 安装和卸载各种软件包版本的随机组合来让事情正常工作。但这是维护我的项目的一种脆弱且低效的方式。
一般来说,处理这种情况的最佳方法是什么?我是否需要简单地记录准确的 brew 和 pip install/uninstall 命令才能使其正常工作?我是否缺少版本“固定”的概念?我是否缺少 brew 和 pyenv 的其他选项可以使这个过程更容易?
【问题讨论】:
-
我很困惑,Bokeh 不依赖于 openSSL。
-
哎呀,也许我用不同的库搞砸了,或者散景依赖于依赖于 openssl 的东西?
-
Bokeh 的依赖列表很短。唯一可能想到的是龙卷风。也许尝试更新更改您安装的 Tornado 版本?
-
是的,既然你提到了它,那就是龙卷风。我想我正在对某种我缺少的模式或策略进行更一般的回答:管理依赖项。每次切换项目时,我都会进入一个未知长度的循环,安装不同版本的不同包,我想我一定错过了更好的跟踪/管理情况的方法。
-
您是否考虑过用 Anaconda(和 conda 环境)替换 brew、pyenv 和 virtualenv?anaconda.com/distribution
标签: python pip openssl homebrew bokeh