Нет модуля с именем contextlib? в виртуальности? - PullRequest
0 голосов
/ 14 марта 2019

У меня есть virtualenv, который используется на нескольких машинах через Dropbox. Наши дропбоксы синхронизируются в одном месте (или, по крайней мере, с символическими ссылками, чтобы они выглядели так), поэтому проблемы с перемещением должны быть спорными.

На моей машине все отлично работает. Я могу создать virtualenv, и он отлично работает. Однако, когда кто-то еще использует его, python выдает No module named contextlib

Когда я создаю virtualenv на компьютере другого человека, он, похоже, работает на моем (я не тестировал полностью)

Все компьютеры Mac. Мой работает под управлением High Sierra, все остальные работают на Мохаве, на случай, если это имеет значение.

Как мне решить эту проблему? или, по крайней мере, что это вызывает?

Я видел Python: нет модуля с именем contextlib? , но это похоже на проблему, связанную со встроенным оборудованием.

ПРИМЕЧАНИЕ: я понимаю, что python думает, что я не должен этого делать. Тем не менее, у меня есть база пользователей, которые НЕ программисты. Они не могут управлять своими венами. Они не могут справиться со сложным докером. Они хотят набрать python foo.py и просто заставить его работать. В прошлом я использовал это для работы с венами.

Если python не может легко справиться с этой простой ситуацией, то, на мой взгляд, это проблема.

О, и я знаю, что библиотеки для разных ОС разные, я имею дело с этим проще, имея другой набор venvs для пользователей Windows. Это работает хорошо, без проблем.

Ответы [ 2 ]

1 голос
/ 14 марта 2019

В общих чертах, совместное использование папки зависимостей между компьютерами и между разными ОС вызовет проблемы. Это то, что теперь может работать для вашей установки (все той же версии ОС), но как только вы собираетесь работать с людьми, которые имеют windows или linux или даже с другими версиями того же поставщика ОС, вы будете есть проблемы.

Вместо того, чтобы искать обходной путь исправления отсутствующей зависимости для contextlib, перейдите к корню проблемы и исправьте возникшую проблему, предоставив общий доступ к папке зависимостей. Если у людей возникают проблемы с их средами, возможно, создайте сценарий для запуска проекта, используйте докер-машину для подготовки или виртуальную машину, которая всегда будет использовать ту же версию, что и база, для запуска всего внутри.

Вот очень хорошее прочтение о том, как организовать зависимости в проекте (из документации по Python)

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

Чтобы запустить python в докере, вы можете прочитать эту статью , но есть еще много других, которые могут облегчить вашу работу в долгосрочной перспективе

Если ваши пользователи не могут запустить pip install -r requirements.txt Я предполагаю, что они не могут запустить либо virtualenv --relocatable ENV верно?

Я должен сказать, что вы должны искать новые инструменты для своих пользователей. Может быть, сценарий или что-то вроде docker image вашего приложения с простой командой run может быть проще.

0 голосов
/ 14 марта 2019

Из virtualenv Документация :

Обычно окружения привязаны к определенному пути. Это означает, что вы не можете перемещать среду или копировать ее на другой компьютер. Вы можете исправить среду, чтобы сделать ее перемещаемой с помощью команды:

$ virtualenv --relocatable ENV

На этой же странице есть важные заметки:

Примечание: вы должны запустить это после того, как вы установили какие-либо пакеты в среду. Если вы сделаете среду перемещаемой, а затем установите новый пакет, вы должны снова запустить команду.

Кроме того, это не делает ваши пакеты кроссплатформенными. Вы можете перемещать каталог, но его можно использовать только на других похожих компьютерах.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...