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

问题描述 投票:0回答:1

我在macOS上,使用brewpyenvvirtualenv

我有一个依赖于bokehgdal的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的其他选项,可能会使此过程更容易吗?

python pip openssl homebrew bokeh
1个回答
0
投票

我不确定这是最好的方法,但是我可以告诉你我通常做什么。

  • 首先,我正在使用Anaconda。
  • [当我在做项目时,我切换到相关的虚拟环境。
  • 在退出之前,当我提交/推送修改时,我还会创建我的环境like you can find it there的导出文件。
  • 我也使用git跟踪此文件,这样,如果我在环境上工作时进行了任何修改,它将存储在.yml文件中。

这样,如果格式化机器或获取新机器,则可以重新安装项目所需的所有依赖项。我需要的每个依赖项的引用都与源一起存储在云中。因此,以防万一我开始出现怪异的行为,我只是从该参考文件正常工作之日起就用它恢复了我的环境。

我在项目之间的切换速度不够快,不足以证明实现该过程自动化的合理性,但我确定如果愿意,这是可行的。

© www.soinside.com 2019 - 2024. All rights reserved.