通过os.system()激活virtualenv
我正在写一个基于Python的脚本,用来快速搭建一个Django应用,使用的是virtualenv、pip和fabric。这应该很简单,但我发现我无法通过这个脚本来激活virtualenv并在里面运行命令。
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本身有什么更深层次的问题呢?
谢谢!
4 个回答
6
其实你根本不需要用“source activate”这个命令。这个命令只是改变了你的命令行环境,把虚拟环境的bin目录放在最前面。假设你的脚本已经知道它刚创建的虚拟环境的目录,你只需要用完整路径去调用那个目录下的程序,比如用 _virtualenv_dir_/bin/easy_install 来安装东西,或者用 _virtualenv_dir_/bin/python 来运行虚拟环境里的其他Python脚本。
11
每次调用 os.system 时,都会在一个新的子进程中运行命令,这个子进程和原来的 Python 进程有相同的特性。
你可以试着把多个命令放在一个字符串里,用分号隔开。
5
每次调用 os.system
时,都会创建一个新的进程。你需要确保 activate
和 easy_install
在同一个 os.system
或 subprocess
调用中运行。