Как использовать виртуальный скрипт python с sudo?

37

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

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

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

    
задан Marco P. 31.12.2012 в 20:13
источник

3 ответа

41

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

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

    
ответ дан Ken Kinder 22.01.2013 в 00:46
источник
3

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

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))

Подробнее здесь: Ссылка

    
ответ дан corey_s 17.06.2015 в 02:43
2

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

    
ответ дан steveayre 07.03.2017 в 09:36