我在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/[email protected]/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的其他选项,可能会使此过程更容易吗?
我不确定这是最好的方法,但是我可以告诉你我通常做什么。
这样,如果格式化机器或获取新机器,则可以重新安装项目所需的所有依赖项。我需要的每个依赖项的引用都与源一起存储在云中。因此,以防万一我开始出现怪异的行为,我只是从该参考文件正常工作之日起就用它恢复了我的环境。
我在项目之间的切换速度不够快,不足以证明实现该过程自动化的合理性,但我确定如果愿意,这是可行的。