通过os.system()激活virtualenv

3 python django pip virtualenv fabric

我正在编写一个基于Python的shell脚本来使用virtualenv,pip和fabric来构建一个Django应用程序.应该很简单,但似乎我无法通过shell脚本激活和运行virtualenv中的命令.

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

运行时,出错:

$ 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
Run Code Online (Sandbox Code Playgroud)

显然这source条线路没有运行,但为什么呢?它是一个并发/线程问题,还是更深层次的virtualenv?

谢谢!

Mat*_*kel 11

每次调用os.system都会在新的子shell中运行该命令,该子shell具有与原始python进程相同的属性.

尝试将命令放入由分号分隔的一个字符串中.


Ned*_*ily 5

每次os.system调用都会创建一个新进程。您需要确保 和activateeasy_install在同一个os.systemsubprocess调用中运行。


Car*_*yer 5

根本不要使用“源激活”。它只是改变你的 shell PATH 把 virtualenv 的 bin 目录放在第一位。我假设你的脚本知道它刚刚创建的 virtualenv 的目录;您所要做的就是通过完整路径调用 _virtualenv_dir_/bin/easy_install 。或者 _virtualenv_dir_/bin/python 用于在 virtualenv 中运行任何其他 python 脚本。