Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与Python保持相同的Shell会话_Python_Mysql_Django_Orm - Fatal编程技术网

与Python保持相同的Shell会话

与Python保持相同的Shell会话,python,mysql,django,orm,Python,Mysql,Django,Orm,我正在构建一个Python脚本,它将自动创建和安排我的新Django项目 我正在做的是 创建一个虚拟环境 使用source my_app/bin/activate pip安装toolname(多次) django startproject django startapp(多次) mkdir`dirs(制作模板dir、资产等) 打开/my\u app/my\u app/settings.py并编辑内部(基于脚本的输入) 打开/my\u app/my\u app/url.py并编辑(解锁)管理部分

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

我正在做的是

  • 创建一个虚拟环境
  • 使用
    source my_app/bin/activate
  • pip安装
    toolname
    (多次)
  • django startproject
  • django startapp(多次)
  • mkdir
    `dirs
    (制作模板dir、资产等)
  • 打开
    /my\u app/my\u app/settings.py
    并编辑内部(基于脚本的输入)
  • 打开
    /my\u app/my\u app/url.py
    并编辑(解锁)管理部分
  • 为应用程序创建默认的
    admin.py
    url.py
    文件
  • 自动下载最新的JavaScript库、图像等
现在的问题是,我希望Python的Shell(
os.system('source my_app/bin/activate')
)保持它的会话,这样我就可以进入虚拟环境,然后可以从Python脚本中安装
pip

现在当我这样做的时候

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命令,但这有点难看。

问题是,当您生成一个bash文件时,它实际上不会启动一个新的shell,而是在当前shell中执行,这就是它如何实际更改其中的环境变量。您的
os.system('source'+ve_path+'bin/activate')
确实启动了一个新的bash,当shell终止时,更改的环境变量消失

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

试着把它放在代码中而不是源代码中:(哦,好吧,我把我的环境称为“A”,但我打赌你现在明白了)

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