Я пытаюсь сделать среду Python отдельной от системной (используя virtualenv) в каталоге, который не находится в каталоге / home, потому что мне нужно использовать его для создания другого программного обеспечения, которое должно быть доступно для нескольких пользователей. Я могу создавать и активировать virtualenv, но когда я выполняю sudo
какую-либо команду (например, чтобы создать или скомпилировать другое программное обеспечение), используется системный питон (я могу сказать из-за доступных модулей).
Поскольку в Ubuntu использование root- пользователя не очень хорошо , есть ли способ сказать, sudo
что использовать virtualenv? Или, может быть, это не правильный подход, и я должен сделать совершенно новую установку Python?
Я использую 64-битную версию Ubuntu 12.04 (и python 2.7).
Ответы:
Проблема почти наверняка заключается в том, что при запуске
sudo
переменные среды, псевдонимы, функции и т. Д. Среды virtualenv не переносятся.Решение состоит в том, чтобы явно запустить исполняемый файл Python виртуальной среды с
sudo
. Например, если ваш virtualenv - это ./AwesomeProject, вы можете запуститьsudo ./AwesomeProject/bin/python <script>
сценарий с virtualenv с правами root.источник
#!<virtualenv_dir>/bin/python
,Просто наткнулся на это и для других, которые могут найти ту же проблему, Кен прав, что переменные env не переносятся. Решением, которое я использовал, было добавить следующие строки в мой скрипт. Это дает дополнительное преимущество - всегда загружать виртуальную среду непосредственно из сценария. (Это означает, что вы можете использовать скрипт с crontab или launchd без каких-либо других обходных путей.)
Дополнительная информация здесь: https://virtualenv.pypa.io/en/latest/userguide.html#using-virtualenv-without-bin-python
источник
Иногда вам нужно обновить $ PATH, потому что скрипт запускает другие программы. Например, pypi-install требует py2dsc-deb в PATH. Эта команда работает:
sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"
источник