Как использовать Python virtualenv с sudo?

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

С тех пор на Ubuntu это не хорошая вещь использовать пользователя root, есть ли способ сказать sudo использовать virtualenv? Или возможно это не корректный подход, и я должен сделать абсолютно новую установку Python?

Я использую версию на 64 бита Ubuntu 12.04 (и python 2.7).

47
задан 22 January 2013 в 04:05

3 ответа

Просто наткнулся на это и для других, которые могут найти ту же проблему, Кен прав, что переменные env не переносятся. Решением, которое я использовал, было добавить следующие строки в мой скрипт. Это дает дополнительное преимущество - всегда загружать виртуальную среду непосредственно из сценария. (Это означает, что вы можете использовать скрипт с crontab или launchd без каких-либо других обходных путей.)

base_dir = os.path.dirname(os.path.abspath(__file__))
activate_this = os.path.join(base_dir, 'venv/bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))

Дополнительная информация здесь: https://virtualenv.pypa.io/en/latest/userguide.html # с использованием-virtualenv-без-бен-питона

0
ответ дан 22 January 2013 в 04:05

Иногда вам нужно обновить $ PATH, потому что скрипт запускает другие программы. Например, pypi-install требует py2dsc-deb в PATH. Эта команда работает: sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"

0
ответ дан 22 January 2013 в 04:05

Проблема почти наверняка в том, что когда вы запускаете sudo, переменные окружения virtualenv, псевдонимы, функции и т. Д. Не переносятся.

Решением было бы явным образом запустить исполняемый файл Python виртуальной среды с помощью sudo. Например, если ваш virtualenv - это ./AwesomeProject, то вы можете запустить sudo ./AwesomeProject/bin/python <script>, чтобы использовать скрипт с virtualenv с привилегиями root.

0
ответ дан 22 January 2013 в 04:05

Другие вопросы по тегам:

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