【问题标题】:Running python after copying virtualenv dir onto Windows without python installed在没有安装 python 的情况下将 virtualenv 目录复制到 Windows 后运行 python
【发布时间】:2025-11-25 00:25:01
【问题描述】:

我在 Windows 机器上创建了一个 virtualenv 目录,我将其复制到未安装 python 的原始 Windows 机器上的相同绝对路径中。在第一次通过时,python.exe 在原始机器上失败,因为它找不到 python27.dll。然后我回到第一台机器并将 python27.dll 从 C:\Windows\System32 复制到 virtualenv \Scrips 文件夹中,并重复该过程。 python.exe 然后在原始机器上失败并出现以下错误:ImportError: no module named functools.

这个问题似乎与以下对 virtualenv 的修复有关:https://github.com/techtonik/virtualenv/commit/bd2fb414d016be7462d19bf9116117ac5aa9b019。我使用的是 virtualenv 1.7.1.2 和 python 2.7。有什么想法吗?

【问题讨论】:

  • 为什么要复制一个virtualenv?它可以很容易地重建:pip freeze --local > requirements.txt 和另一台机器上的pip install -r requirements.txt(在这两种情况下,virtualenv 都应该是活动的并且已经使用--distribute 创建)
  • 我的问题很简单,virtualenv 可以在没有安装 python 的情况下工作吗?我怎样才能绕过这个限制?这是对bugs.python.org/msg136205 的回复。
  • @TheifMaster 用例是修改虚拟机文件结构,使 python 从机器启动的那一刻起就可以执行,即在 pip 命令可以执行之前
  • 如果你想在不安装 python 的情况下运行你的程序,试试 py2exe、cx_freeze、pyInstaller 等

标签: python windows virtualenv


【解决方案1】:

virtualenv 不是完整的 Python 安装。它只是一个使用现有 Python 安装并提供隔离环境来安装包的环境。不要期望给定的 virtualenv 能够工作,除非它是在创建位置(其中“位置”包括它所在的计算机)。

对于部署,有 PEX 和 PyInstaller 以及各种其他选项。

【讨论】:

    【解决方案2】:

    来自您的一位 cmets:

    我的问题很简单,virtualenv 可以在没有安装 python 的情况下工作吗?

    不,请阅读'Making Environments Relocatable' in virtualenv documentation

    引用最重要的:

    注意:此选项在某种程度上是实验性的,可能还有一些尚未确定的警告。此外,这目前不适用于 Windows。

    【讨论】:

    • 尽管有文档,您可以将 virtualenv 从 Windows 机器重新定位到 Windows 机器,只要它重新定位到相同的绝对路径。但是,只要第二台 Windows 机器已经安装了相同的 python 发行版,这仅在经验上有效
    • 它可以工作,但完全不受支持,并且可能随时中断。在我看来,您正在尝试以错误的方式进行操作,如果它应该由开发人员使用,只需制作一个批处理来重建 virtualenv,或者使用 py2exe、cx_freeze、pyInstaller 或任何类似的最终用户制作可执行文件。
    最近更新 更多