【问题标题】:Pycharm subprocess.Popen python under virtualenvpycharm subprocess.Popen python下virtualenv
【发布时间】:2017-06-04 11:34:01
【问题描述】:

调用 subprocess.Popen(["python"]) 会生成一个进程,就像调用全局 2.7 python,而不是生成 virtualenv 中定义的 3.6 版本。 subprocess.Popen 文档说调用了 execvp,但它似乎表现得好像一个新的干净的 shell 正在调用它。 有没有办法在代码中但在 virtualenv 下强制调用系统调用?

在 macOS 上运行,项目位于 Pycharm 识别的 virtualenv 目录中(Preferences->Project->Project Interpreter 指向 virtualenv 中的 python)。我的全局 python 命令启动 2.7 解释器,但在 virtualenv 中 python 将启动 3.6 解释器。

【问题讨论】:

  • 我在 Mac Catalina 上使用 PyCharm v2019.1.1 运行时遇到了完全相同的问题

标签: python subprocess pycharm virtualenv popen


【解决方案1】:

subprocess.Popen([sys.executable])

sys.executable 是运行当前脚本的 Python 解释器。使用它来运行具有相同解释器的新脚本是很自然的。

【讨论】:

  • 添加任何解释会很棒。
  • 如果我理解正确,这仅对运行诸如 python myscript.py? 之类的命令有用?
  • @ygesher 这正是问题所在——如何使用来自 virtualenv 的 python 运行 python myscript.py
  • 啊,是的,但是 OP 遇到的实际问题是一个更广泛的问题:即 PyCharm 不尊重环境。我了解您的回答如何解决 OP 的直接问题,但我对它没有解决根本问题表示失望。就我而言,我试图运行 virtualenv 中存在的不同二进制文件 (ogr2ogr),所以这个答案对我没有用
猜你喜欢
  • 1970-01-01
  • 2011-07-05
  • 2019-01-14
  • 2018-01-28
  • 2015-08-27
  • 2016-09-05
  • 1970-01-01
  • 2018-05-19
  • 2020-04-17
相关资源
最近更新 更多