python - 如何在 IPython shell 中获取或激活虚拟环境?

标签 python ipython virtualenv pipenv python-poetry

我使用 IPython 和 %bookmark 魔术命令,但限制是我需要退出 IPython shell 以激活虚拟环境,然后重新启动 IPython。

是否有内置于 IPython、第三方包或已知 hack 中的方法让我在不退出 IPython shell 的情况下激活环境?

实际工作流程

# within ipython shell
exit

# bash shell
cd path/of/my/project
poetry shell  # or pipenv shell
ipython

预期的工作流程

%cd -b demographics

# activate venv 

import package # from that env

最佳答案

这是一个很好的问题,但不幸的是,答案可能不是您所希望的。如果我正确理解你的问题 - 这是不可能的。因为虚拟 shell 激活本质上是运行子进程,它为另一个 Python 解释器设置 PATH,然后为此设置 PYTHONPATH 环境变量。子进程永远不能在任何操作系统中修改其父进程。例如,您不能更改已经运行的 Python 解释器,因为在内存中替换正在运行的进程非常复杂,而且在实践中从未做过。

如果这是一个工作流程问题并且您肯定想从 IPython 中执行此操作,我建议您编写一个单行复制粘贴命令来执行以下操作:

  • 使用 virtualenv 启动一个新的 IPython,例如(source venv/bin/activate && ipython)
  • 终止从 virtualenv 启动的旧的现有 IPython session (尽管不确定如何在 IPython 提示符下退出 IPython)

对于他的工作流程问题,可能有更好的解决方案。也许有一个类似于 %%bookmark 的工作流程,但是对于整个 Python 环境和流程,比如创建 shell 脚本。

关于python - 如何在 IPython shell 中获取或激活虚拟环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70512548/

相关文章:

python - Seaborn 绘图在 ipython 单元中显示乱序

python - 我想在我的第一个 python 环境中从第二个 python 环境调用函数。这可能吗?

python - 在 virtualenvwrapper 中激活环境

python - venv vs virtualenv - 为什么 venv 不使用当前的 pip 和 setuptools?

python - 将 pandas 数据框与数据透视表合并

python - 我应该在 IPython 中的哪里添加 c.InlineBackend.rc = {} 以使用我自己的 matplotlib rc

python - 在两个列表列表之间执行操作并跟踪初始列表

python - 使用变量初始化解释器

python - tensorflow 的 session 运行张量列表的顺序是什么?

python - 如果 Pandas 列不包含同一行中另一列的值,则在新行中添加另一列的值