Как управлять проектом python, который зависит от нескольких версий общей библиотеки? - PullRequest
0 голосов
/ 16 января 2020

Я нахожусь на 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, которые мне не хватает, которые могут упростить этот процесс?

1 Ответ

0 голосов
/ 17 января 2020

Я не уверен, что это лучший способ сделать это, но я могу сказать вам, что я обычно делаю.

  • Прежде всего, я использую Anaconda.
  • Когда я работаю над проектом, я переключаюсь в соответствующую виртуальную среду.
  • Перед выключением, когда я фиксирую / pu sh мои модификации, я также создаю файл экспорта моей среды , как вы можете найти его там .
  • I также отслеживайте этот файл с помощью git, таким образом, если я внесу какие-либо изменения при работе в среде, он будет сохранен в файле .yml.

Таким образом, я могу переустановить все зависимости, необходимые для проект, если я отформатирую свою машину или получу новую, et c. И ссылка на каждую нужную мне зависимость хранится в облаке с моими источниками. Поэтому в случае, если я начинаю странно себя вести, я просто восстанавливаю свою среду с этим справочным файлом со времени, когда он работал.

Я не переключаюсь между проектами достаточно быстро, чтобы оправдать автоматизацию этого процесса, но Я уверен, что это возможно, если вы хотите.

...