Я нахожусь на macOS, используя brew
, pyenv
и virtualenv
.
У меня есть проект Python, который зависит от bokeh
и gdal
(оба python пакеты были установлены с помощью pip в виртуальной среде). И bokeh, и gdal зависят от системной версии libopenssl
, но зависят от разных версий (1.0 и 1.1).
В прошлом этот проект работал на разных этапах, с некоторой комбинацией библиотек. (используя pip для всех пакетов python и 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 и pip, чтобы это работало? Я скучаю по понятию версии "закрепление"? Есть ли у меня дополнительные опции с brew и pyenv, которые мне не хватает, которые могут упростить этот процесс?