如何管理依赖于共享库的多个版本的python项目?
我在macOS上,使用的是如何管理依赖于共享库的多个版本的python项目?,python,pip,openssl,homebrew,bokeh,Python,Pip,Openssl,Homebrew,Bokeh,我在macOS上,使用的是brew、pyenv和virtualenv 我有一个Python项目,它依赖于bokeh和gdal(这两个Python包都是在虚拟环境中随pip一起安装的)。bokeh和gdal都依赖于libopenssl的系统版本,但它们依赖于不同的版本(1.0和1.1) 过去,我曾让这个项目在不同的时间点上运行,并使用了一些库的组合(对所有python包使用pip,对系统包使用brew),但当我更改python版本和环境(使用pyenv)以处理其他项目,然后再回到这个项目时,它就不
brew
、pyenv
和virtualenv
我有一个Python项目,它依赖于bokeh
和gdal
(这两个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安装/卸载命令以使其正常工作?我是否缺少版本“固定”的概念?brew和pyenv是否还有其他选项是我缺少的,这可能会使此过程更简单?我不确定这是最好的方法,但我可以告诉您我通常做什么
- 首先,我用的是蟒蛇
- 在项目中,我会切换到相关的虚拟环境李>
- 在退出之前,当我提交/推送我的修改时,我还创建了我的环境的导出文件
- 我还使用git跟踪这个文件,这样,如果我在环境中进行任何修改,它将存储在.yml文件中
我在项目之间切换的速度不够快,无法证明自动化这个过程是合理的,但如果您愿意,我相信这是可行的。我很困惑,博凯并不依赖openSSL。哎呀,也许我用另一个库搞砸了,或者博凯依赖于依赖openSSL的东西?博凯的依赖列表很短。唯一可能想到的是龙卷风。也许试着更新一下你安装的Tornado版本?是的,既然你提到了,那就是Tornado。我想我想要的是一个更一般的答案,关于我所缺少的某种模式或策略:管理依赖关系。每次切换项目时,我都会进入一个未知长度的循环,即安装不同软件包的各种版本,我想我一定缺少更好的跟踪/管理情况的方法。您是否考虑过用Anaconda(和conda环境)替换brew、pyenv和virtualenv