与Python保持相同的Shell会话

时间:2013-05-18 18:39:11

标签: python mysql django orm

我正在构建一个Python脚本,它将自动创建和安排我的新Django项目。

我在做什么;

  • 创建virtualenv
  • 使用source my_app/bin/activate
  • 激活virtualenv
  • pip install toolname(多次)
  • django startproject
  • django startapp(多次)
  • mkdir `dirs(制作模板目录,资产等)
  • 打开./my_app/my_app/settings.py并编辑内部(基于脚本的输入)
  • 打开./my_app/my_app/urls.py并修改(解锁)管理部分
  • 为应用
  • 创建默认的admin.pyurls.py个文件
  • 自动下载最新的JavaScript库,图片等。

现在的问题是我希望Python的Shell(os.system('source my_app/bin/activate'))保持它的会话,这样我就可以进入虚拟环境,然后从python脚本中pip install

现在我做的时候;

os.system('virtualenv ' + virtualenv_name)
os.system('source ' + ve_path + 'bin/activate')
os.system('which python')

它仍告诉我它位于/bin/python,但应该在/path/to/my_app/bin/python

有没有人知道是否有本地方式(所以我的队友不必在主环境中安装超过virtualenv)以保持shell的会话活着?

我正在考虑链接多个命令并将它们连接成一个shell命令,但这有点难看。

1 个答案:

答案 0 :(得分:2)

问题是当你获取一个bash文件时,它并没有真正启动一个新的shell,而是在当前的shell中执行,这就是它如何实际改变那里的环境变量。你的os.system('source ' + ve_path + 'bin/activate')确实启动了一个新的bash,当shell终止时,更改的环境变量就会消失。

至少在我的系统上,virtualenv也会生成activate_this.py文件。该文件中的第二行解释了如何使用它。它是激活bash代码的python版本。

尝试将其放入代码而不是源代码行中:(哦,我称我的环境为“A”,但我打赌你现在有了这个想法)

activate_this = 'A/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))