【问题标题】:virtualenv - run scripts/path managementvirtualenv - 运行脚本/路径管理
【发布时间】:2019-01-06 22:14:28
【问题描述】:

简单地说:
我如何保证使用的是我的 virtualenv 而不是本机 env?

其他答案的问题: 我已经看到这个问题得到了很多回答,但答案很简洁,基本上只是涵盖了虚拟环境的“即插即用”场景。

我的场景: 让我们假设一个足够复杂的文件夹中的虚拟 Python 环境(myEnv)和运行它的机器足够复杂(targetEnv)。让我们假设 virtualenv (myEnv) 中有很多自定义项,并且该 virtualenv 中的 evn 变量以我们不知道的方式进行了修改(例如:通过 .pth 文件)。

通常我看到的答案是我们应该在 windows cmd 提示符下做这样的事情:

cd /d C:\Program Files\MyApp\myEnv\Scripts\ && activate
cd /d C:\Program Files\MyApp\ && python Main.py

现在,如果您查看 activate.batch 或 Activate.ps1,您会看到它们所做的只是假设您已经为您的原生 python 环境设置了一个 PYTHONHOME 变量,然后设置了新的 env 变量 _OLD_VIRTUAL_PATH_OLD_VIRTUAL_PYTHONHOMEVIRTUAL_ENV,并暂时删除 PYTHONHOME 变量。

但是这仍然没有告诉 shell 如何找到像 python.exe 这样的东西。当我像上面建议的代码一样运行它时,我得到一个 python 环境,它不包含 shell 中的任何 sys 路径,如果显式调用这些路径将被激活: cd /d C:\Program Files\MyApp\myEnv\Scripts\ && python.exe

然后在生成的 shell 中我调用: 导入系统 系统路径

因为所有activate 所做的只是更改环境变量的名称,所以这种做法仍然是完全合乎逻辑的,只需调用: cd /d C:\Program Files\MyApp\ && python Main.py

_OLD_VIRTUAL_PYTHONHOME(与PYTHONHOME 变量相同)而不是VIRTUAL_ENV(等于C:\Program Files\MyApp\myEnv\)路径中找到python.exe。我想这意味着可以发现“VIRTUAL_ENV”路径中的模块,但是永远不会搜索添加到虚拟环境的路径,因为不会调用 myEnv shell 的可执行文件。

有人知道如何解决这个问题吗?

编辑 1

正如我需要澄清的 cmets 中所述。问题中提到的 .pth 文件仅包含相对路径,而不包含绝对路径。在任何实际的运输或部署情况下,假设我们不知道这个虚拟环境的安装位置,因此必须依赖使用相对于环境变量的路径。

【问题讨论】:

  • 你不能直接使用 python 可执行文件的路径吗? cd C:\Program Files\MyApp\ && C:\Program Files\MyApp\myEnv\python.exe Main.py。至少这是我在 Linux/MacOS 上在 shell 脚本中使用 venv 时会做的事情。
  • 我实际上刚刚测试过,仍然没有提取 virtualenv 中的 .pth 文件
  • 无法复制;在 Windows 10 VM 上的 virtualenv 中对其进行测试,当使用 venv 的 python 可执行文件的绝对路径时,站点包中的 pth 文件会正确应用。你能编辑你的问题,为问题添加minimal reproducible example吗?
  • 啊,.pth 包含安装 virtualenv 的相对路径。在这种情况下,不可能知道绝对路径并将其放在 .pth 中。还有自我挫败,我想,如果有人知道绝对路径,为什么还要使用环境变量?
  • 您将 pth 文件放在哪里?是 venv 根目录(例如C:\Program Files\MyApp\myEnv)吗?

标签: python windows virtualenv


【解决方案1】:

您是否尝试在 CMD 中使用以下命令??

python -m venv "C:\Program Files\MyApp\myEnv\Scripts\"

你可以参考更多关于venvhere

【讨论】:

  • 我运行后你期望结果是什么?
猜你喜欢
  • 2020-10-21
  • 1970-01-01
  • 2021-06-12
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多