Вопрос

Я пишу сценарий оболочки на основе Python для создания шаблона приложения Django с использованием virtualenv, pip и Fabric.Должно быть достаточно просто, но похоже, что я не могу активировать и запускать команды в виртуальном окружении через сценарий оболочки.

os.system('virtualenv %s --no-site-packages' % project_name)
os.system('source %s/bin/activate' % project_name)
os.system('easy_install pip')

При запуске вылетает ошибка:

$ startproject+ -s false sample
New python executable in sample/bin/python
Installing setuptools............done.
/testing
Searching for pip
Best match: pip 0.4
Processing pip-0.4-py2.6.egg
pip 0.4 is already the active version in easy-install.pth
Installing pip script to /usr/local/bin
error: /usr/local/bin/pip: Permission denied

Очевидно, source линия не запускается, но почему?Это проблема параллелизма/поточности или что-то более глубокое с virtualenv?

Спасибо!

Это было полезно?

Решение

Каждый os.system вызов создает новый процесс.Вам необходимо убедиться, что activate и easy_install запускаются в одном и том же os.system или subprocess вызов.

Другие советы

Каждый вызов os.system запускает команду в новой подоболочке, которая имеет те же свойства, что и исходный процесс Python.

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

Просто вообще не используйте «активацию источника».Он не делает ничего, кроме изменения PATH вашей оболочки, чтобы сначала поместить каталог bin virtualenv.Я предполагаю, что ваш сценарий знает каталог только что созданного виртуального окружения;все, что вам нужно сделать, это вызвать _virtualenv_dir_/bin/easy_install по полному пути.Или _virtualenv_dir_/bin/python для запуска любого другого скрипта Python в виртуальном окружении.

Вы также можете установить virtualenvwrapper и использовать перехватчик postmkvirtualenv.Я использую его для автоматического добавления свежих копий pip и IPython в создаваемые мной виртуальные среды (поскольку я не хочу, чтобы он использовал мой системный IPython).Я также использую его для копирования pythonw в виртуальную среду, иначе вещи на основе wx не будут работать.Выглядит так:

easy_install pip
pip install -I ipython
cd ~/bin
python install_pythonw.py ${VIRTUAL_ENV}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top