Я пытаюсь сделать среду Python отдельной от системы одна (использующий virtualenv) в каталоге, который не находится под / домой, потому что я должен использовать ее для создания другого программного обеспечения, которое должно быть доступно для многочисленных пользователей. Я могу создать и активировать virtualenv хорошо, но когда я sudo
некоторая команда (например, чтобы сделать или скомпилировать другое программное обеспечение), это - системный Python, который используется (я могу сказать из-за доступных модулей).
С тех пор на Ubuntu это не хорошая вещь использовать пользователя root, есть ли способ сказать sudo
использовать virtualenv? Или возможно это не корректный подход, и я должен сделать абсолютно новую установку Python?
Я использую версию на 64 бита Ubuntu 12.04 (и python 2.7).
Просто наткнулся на это и для других, которые могут найти ту же проблему, Кен прав, что переменные 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-без-бен-питона
Иногда вам нужно обновить $ PATH, потому что скрипт запускает другие программы. Например, pypi-install требует py2dsc-deb в PATH. Эта команда работает: sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"
Проблема почти наверняка в том, что когда вы запускаете sudo
, переменные окружения virtualenv, псевдонимы, функции и т. Д. Не переносятся.
Решением было бы явным образом запустить исполняемый файл Python виртуальной среды с помощью sudo
. Например, если ваш virtualenv - это ./AwesomeProject, то вы можете запустить sudo ./AwesomeProject/bin/python <script>
, чтобы использовать скрипт с virtualenv с привилегиями root.