Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何管理依赖于共享库的多个版本的python项目?_Python_Pip_Openssl_Homebrew_Bokeh - Fatal编程技术网

如何管理依赖于共享库的多个版本的python项目?

如何管理依赖于共享库的多个版本的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)以处理其他项目,然后再回到这个项目时,它就不

我在macOS上,使用的是
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