【问题标题】:No activate_this.py file in venv / pyvenv [duplicate]venv / pyvenv 中没有 activate_this.py 文件 [重复]
【发布时间】:2014-09-21 03:05:08
【问题描述】:

我需要从 python 脚本中启动 venv / pyvenv,并且我知道要运行官方文档:

activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

但我没有 activate_this.py 文件,我无法找到任何地方如何创建。

我正在运行 python 3.4.1。知道我需要做什么吗?

【问题讨论】:

标签: python virtualenv


【解决方案1】:

正如您所指出的,pyvenv/venv 模块不附带activate_this.py。但是如果你需要这个功能,你可以从virtualenv借用activate_this.py,放到预期的位置(virtualenv_path/bin/activate_this.py),然后使用。它似乎工作正常。唯一的问题是virtualenv 文档对于 Python 3 来说已经过时了(他们声称你使用了不存在的 execfile)。兼容 Python 3 的替代方案是:

activator = 'some/path/to/activate_this.py'  # Looted from virtualenv; should not require modification, since it's defined relatively
with open(activator) as f:
    exec(f.read(), {'__file__': activator})

activate_this.py 所做的一切都是神奇的,因此您可以手动执行相同的更改而无需从 virtualenv 中掠夺(调整 PATHsys.pathsys.prefix 等),但借用会使它在这种情况。

【讨论】:

  • 当我读到这个答案时,我真的把我的饮料吐了:)。但它完全有效!如果这就是他们的全部,为什么不只是 python venv 的一部分?
  • 我一定遗漏了一些东西,但它对我不起作用。在我的 PWD 中,我在 .venv 中创建了一个 virtualenv,然后我使用您提供的代码创建了一个 file.py,除了 activate_this.py 的路径更改为 ofc。然后我运行python3 file.py 但我的提示没有更改为(.venv) ... 我使用的是Python 3.8.10。有人知道我在做什么错吗?非常感谢。
  • @Paloha:activate_this.py 是您在 Python 脚本(及其子进程)的整个生命周期内激活虚拟环境的方式。它不可能改变它在其中运行的 shell(它是一个子进程,它无法返回并改变父进程的环境)。持久更改shell本身的唯一方法是source /path/to/venv/bin/activate的正常路径(如果需要,根据shell添加适当的文件扩展名),这通常是您应该做的;这是针对脚本必须自己执行的特殊情况。
  • @ShadowRanger,非常感谢您的快速回复。我认为是这种情况,但这个答案似乎另有说明stackoverflow.com/a/14792407/8691571。这就是我尝试这种方法的原因。如果你是对的,我将通过使用 bash 脚本包装我的 python 脚本来解决它,我将传递路径并从那里获取它。谢谢。
  • @Paloha:是的,这个答案涉及三层:1) 非 Python shell,2) 最初启动的 Python 进程,3) 使用 subprocess 启动的可选子 Python 进程。 activate_this.py 用于当您不想在 #1 中使用 source,也不想编写包装 bash 脚本来执行 sourceing,并且您需要 #2 在 venv 中,即使它不是启动时处于活动状态(该答案结束的地方)。该答案的其余部分集中在 #2 留在 venv 之外,而 #3 在其中。
猜你喜欢
  • 2015-02-12
  • 2017-05-25
  • 1970-01-01
  • 2021-06-04
  • 2021-11-11
  • 2013-08-28
  • 2012-09-04
相关资源
最近更新 更多