【问题标题】:Staying in the same Shell session with Python与 Python 保持在同一个 Shell 会话中
【发布时间】:2013-05-13 17:20:32
【问题描述】:

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

我正在做的是;

  • 创建一个虚拟环境
  • source my_app/bin/activate激活virtualenv
  • pip install toolname(多次)
  • django 启动项目
  • 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 命令中,但这有点难看。

【问题讨论】:

    标签: python mysql django orm


    【解决方案1】:

    问题是当你获取一个 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 2016-12-13
      • 1970-01-01
      • 2015-01-16
      • 2018-02-07
      • 2018-05-11
      相关资源
      最近更新 更多