Вопрос по python, cloud-hosting, django, virtualenv, paas – Кроссплатформенный интерфейс для virtualenv

15

Я разработал весь свой проект (Django, Python) для Windows, и все PaaS там используют Linux.

VirtualEnv on Linux:

VirtualEnv_dir /
                 bin/ activate, activate_this.py
                 include /
                 lib /
                 local /

VirtualEnv of Windows:

VitualEnv_dir /
                Include/
                Lib /
                Scripts/ activate.bat, activate_this.py

Поскольку virtualenv сильно отличается в Windows & amp; Linux. Как мне использовать мой Windows Virtualenv на PaaS?

Edit:

Если я нахожусь на окнах, мне нужно запуститьcall virtualenv_dir/scripts/activate.bat чтобы войти в это. Где, как в Linux, это что-тоsource virtualenv_dir/bin/activate.

Теперь в моем репо содержится virtualenv, созданный с помощью Windows (который использует .bat). Когда я перенесу репо в систему Linux, как я смогу это запустить? (файлы bat не будут работать!)

Я использую OpenShift PaaS, где я хотел бы поместить virtualenv в репозиторий Git. Как я могу активировать это?

Какое лучшее решение?

@JosefAssad Надеюсь, вы найдете конкретный вопрос сейчас !! Surya
Этот вопрос немного общий. Прежде всего, я не согласен с тем, что это сильно отличается, но есть небольшие различия, которые могут обернуться серьезными проблемами в конкретных настройках и средах. Поэтому, пожалуйста, предоставьте более подробную информацию о том, какая проблема у вас есть или предвидится для ваших вариантов использования. schacki

Ваш Ответ

1   ответ
25

Если вы не используете некоторые специфичные для Windows библиотеки; или альтернативная реализация Python (например, IronPython), не о чем беспокоиться.

Многие люди (включая меня) используют Windows для разработки и развертывают в Linux для производства и используют для этой цели virtualenv. Он разработан, чтобы сделать вашу среду портативной.

Вы не продвигаете всю виртуальность в Linux.

Когда ваша виртуальная среда готова и ваш код работает, вы должны заморозить требования для вашего приложения:

pip freeze > requirements.txt

В вашей целевой операционной системе; создатьempty виртуальная среда:

virtualenv --no-site-packages prod_env

В последних версияхvirtualenv, --no-site-packages по умолчанию.

Затем заполните среду вашим файлом требований из разработки:

source prod_env/bin/activate
pip install -r requirements.txt

Когда у вас есть изменения требований, просто регенерируйтеrequirements.txt файл и запуститьpip install -r requirements.txt в производстве.

В некоторых ситуациях ваши производственные системы не имеют доступа к Интернету для загрузки пакетов, поэтомуpip install трюк не работает. Для этих сценариев вы можете создать свой собственныйчастный сервер Pypi и отправь туда свои посылки. Дополнительный бонус по этому маршруту заключается в том, что вы можете создавать и отправлять приватные пакеты и устанавливать их с помощью обычных утилит setuptools.

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

Я тоже ищу ответ на этот вопрос. Было бы здорово, если бы вы могли располагать как Linux, так и Windows Dirs рядом друг с другом.
Как говорит @JosefAssad: в вашем репо не должно быть virtualenv. Он должен включать в себяrequirements.txt файл, в котором перечислены все пакеты, которые необходимо установить в virtualenv.
Итак, как вы по-прежнему используете Virtualenv DIR для Linux, который был создан на Windows ?? Можете ли вы поделиться своим подходом? Surya
Как уже было сказано, вам не нужно иметь единую среду для Windows и Linux, поскольку предполагается, что среды должны быть реплицируемыми, должна быть возможность просто создать конкретную ОС, создав новую среду и установив там необходимые пакеты. Кроме того, некоторые библиотеки могут требовать компиляции, поэтому их нельзя просто перенести из одной системы в другую, но можно установить (и скомпилировать как часть шага установки) в необходимой системе.
Я думаю, что говорит Бурхан, просто создайте vrtualenv в системе Linux, переместите свой исходный код (ВАШ исходный код, а не артефакты virtualenv) и убедитесь, что все требования выполняются с помощью pip (blog.ianbicking.org/2008/12/16/using-pip-requirements). Если вы не используете библиотеки для Windows, это все, что вам нужно сделать.

Похожие вопросы