【问题标题】:Activating conda environment within Python在 Python 中激活 conda 环境
【发布时间】:2018-07-12 16:44:00
【问题描述】:

conda 是否提供了一种从正在运行的 Python 程序中激活环境的方法?

例如,使用virtualenv 创建的每个虚拟环境(venv)都有一个脚本venv/bin/activate_this.py(假设您在Linux 上),可用于在正在运行的Python 程序中激活venv,如下所示:

activate_this = '/full/path/to/venv/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

我只是想知道我是否需要为这项工作调整 virtualenv 的 activate_this.py(virtualenv 和 conda 环境的结构略有不同,所以不能按原样工作)或者有一个现有的方法。

【问题讨论】:

  • @darthbith 我正在重新访问一个不久前工作的 Flask 网络应用程序。那里的问题是应用程序本身在 virtualenv 虚拟环境中运行,但是在同一环境中安装 uwsgi 时遇到了困难。所以我在一个单独的 Conda 环境中安装了 uwsgi 模块。在初始化时,必须使用 conda env 启动 uwsgi,然后切换到 virtualenv 以实际运行应用程序。
  • @darthbith 所以有一种方法可以切换到 virtualenv 环境。看到这个:github.com/pypa/virtualenv/blob/… 很好奇 conda 是否内置了任何类似的功能。
  • 正如我所说,我认为没有办法做到这一点。原因可能是因为 conda 环境不仅仅是 virtualenv 环境......它们可以拥有自己的编译器,运行脚本以在执行时设置环境变量等。为什么不将 virtualenv 重新创建为 conda env 并添加 uwsgi 呢?
  • @darthbith 你对 conda envs 更多参与是正确的。我最终这样做了 - 将所有内容放在一个 conda env 中。我正在远离 virtualenv,只是想在它和 conda 之间找到一些相似之处,因此提出了这个问题。

标签: python virtualenv conda miniconda


【解决方案1】:

我认为这不可能按照您的意图进行。我不是这方面的专家,但是虚拟环境的python解释器不一样。您还可以看到该文件只会更改您的系统路径,因此要使用的 python 解释器将指向虚拟环境的 on。所以我认为你实际上必须使用虚拟环境的 python 解释器在你的脚本中生成一个新的 python 进程。像这样:

import subprocess

subprocess.run(['/full/path/to/venv/bin/python', 'path/to/script.py'])

【讨论】:

  • 如果其他环境使用的 python 二进制版本与基本 env 二进制文件不同,那么你是对的。如果两个 env 都使用相同的 Python 版本,那么环境之间的区别仅在于它们使用的模块,这完全由 PATH 确定,并且可以在运行时通过使用 activate_this.py 之类的东西进行更改。
猜你喜欢
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多