python - 与 Python 保持在同一个 Shell session 中

标签 python mysql django orm

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

我在做的是;

  • 创建一个虚拟环境
  • 使用source my_app/bin/activate激活virtualenv
  • pip install toolname(多次)
  • django 启动项目
  • django startapp(多次)
  • mkdir `dirs(制作模板目录、 Assets 等)
  • 打开 ./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')) 保持 session 状态,以便我进入该虚拟环境然后可以 pip install 来自 python 脚本。

当我这样做的时候;

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

它仍然告诉我它在 /bin/python 中,但应该在 /path/to/my_app/bin/python 中。

有谁知道是否有一种 native 方法(这样我的团队成员就不必在主环境中安装 virtualenv)来保持 shell 的 session 事件?

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

最佳答案

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

关于python - 与 Python 保持在同一个 Shell session 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627691/

相关文章:

python - matlab数据文件到pandas DataFrame

php - ON 子句中的 MySQL 未知列 'useranswers.userid'

MySQL 连接查询两个表中的最大日期

python - Django 根据某些请求重置连接

python - 属性错误 : 'str' object has no attribute 'policy'

python - 按组 sklearn cross_val_score 分为训练和测试

python - 如何在Python中以特定的输出格式将矩阵(从一个文件读取)写入另一个csv文件

php - 通过 PHP 的 "insert into"mySQL 查询似乎有效,但未添加任何内容

python - xlsxwriter 消耗太多内存并且进程被终止

您自己的用户模型的 Django 每个对象权限