通过使用os.system激活的virtualenv()
-
18-09-2019 - |
题
我正在写一个基于Python的外壳脚本样板与的virtualenv,画中画,和织物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')
在运行时,这错误的:
$ 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每次调用运行在一个新的子shell,其具有相同的特性与原始蟒进程的命令。
尝试把命令转换成由分号分隔一个字符串。
只要不使用“源激活”的说法。它只是改变你的shell路径,首先把virtualenv中的bin目录。我相信你的脚本知道它刚刚创建的virtualenv的目录;所有你所要做的就是调用_virtualenv_dir_ /斌/的easy_install通过完整路径。或_virtualenv_dir_ / bin中/蟒为的virtualenv内运行的任何其他Python脚本。
您还可以安装virtualenvwrapper,并使用postmkvirtualenv挂钩。我用它来为我创造virtualenvs PIP和IPython的新鲜副本自动将(因为我不使用我的系统IPython的希望)。我还用它来pythonw复制到virtualenv中,否则基于WX-东西,将无法正常工作。看起来像这样:
easy_install pip
pip install -I ipython
cd ~/bin
python install_pythonw.py ${VIRTUAL_ENV}
不隶属于 StackOverflow