【问题标题】:django-admin.py and virtualenv issue on WindowsWindows 上的 django-admin.py 和 virtualenv 问题
【发布时间】:2011-06-17 18:45:31
【问题描述】:

在我的系统中,系统范围内安装了 Django 1.2.3:

C:\>python -c "import django; print django.get_version()"
1.2.3
C:\>django-admin.py --version
1.2.3

然后在我安装 Django 1.2.4 的 C:\dev 中有一个名为 venv 的虚拟环境:

C:\> dev\venv\Scripts\activate.bat
(venv) C:\> python -c "import django; print django.get_version()"
1.2.4
(venv) C:\> django-admin.py --version
1.2.3

我的问题:

  1. 如果当前 Python(虚拟)环境安装了 django 1.2.4,为什么 django-admin.py 报告版本 1.2.3?
  2. venv 处于活动状态时,如何自动使用 Django 的 1.2.4 django-admin.py?

附加信息:

  • virtualenv 版本:1.5.1,Python 版本 2.7
  • 用于创建 venv 的命令:C:\dev\> virtualenv --no-site-packages venv
  • (venv) C:\> echo %PATH%

    C:\dev\venv\Scripts; ...other paths...

  • venv 中 django-admin.py 的 shebang:#!C:\dev\Scripts\python.exe

希望您能提供帮助,非常感谢。

【问题讨论】:

  • 嗨,当我尝试使用 已经存在的 django 项目后来安装的 virtualenv 时,我在 linux 上遇到了类似的问题。

标签: python windows django django-admin virtualenv


【解决方案1】:

当我尝试使用 已经存在的 django 项目后来安装的 virtualenv 时,我在 linux 上遇到了类似的问题。

django 1.2.4 的 django-admin.py 是否可能在您的路径上不在,但您的 django 1.2.3 安装的 django-admin.py 是否在您的路径上?

这将解释您的输出

C:\> dev\venv\Scripts\activate.bat
(venv) C:\> python -c "import django; print django.get_version()"
1.2.4
(venv) C:\> django-admin.py --version
1.2.3

因为 python 命令在您的 virtualenv 路径上,但 django-admin.py 文件可能不在。

关于你的第二个问题(假设我上面的猜测是正确的):将django-admin.py 文件符号链接到你的C:\dev\venv\Scripts 目录中,尽管我不确定它在 Windows 上是如何工作的(你在使用 Cygwin 吗?)。

当然,您总是可以将其称为 python C:\path\to\django-admin.py(因为调用了正确的 python 版本)但当然这需要大量输入。

【讨论】:

  • 您好,感谢您的回答。我在普通的 Windows 上(没有 Cygwin)。 django-admin.py is 在系统路径上,如我的原始帖子中附加信息的第 3 点所示。 C:\dev\venv\Scripts 作为第一个路径 应该 覆盖系统范围的 Scripts 目录(但看起来并非如此!)
  • 嗨,好的,shebang 行#!C:\dev\Scripts\python 指向正确的python 版本吗?似乎它可能需要#!C:\dev\venv\Scripts\python,但我在这里猜测。
  • 你是对的,它应该是#!C:\dev\venv\Scripts\python,抱歉这是转录错误。顺便说一句,shanyu对这个问题给出了一个现实的解释;-(
【解决方案2】:

这是因为您的 Windows 已将 .py 扩展与全局安装的 python.exe 相关联。因此,当您键入django-admin.py 时,即使您在 virtualenv 中,也会调用全局 python,然后它会在自己的站点包中找到您的全局 django 安装。尝试python django-admin.py 绕过关联。

【讨论】:

    【解决方案3】:

    正如 shanyu 已经解释的那样,这是因为 *.py 文件关联到您的 Python 安装可执行文件而不是您的 virtualenv。但是,为了以不同的方式回答您的第二个问题,我通过在我的 virtualenv 的 Scripts 目录中创建一个 django-admin.bat 解决了这个问题。它的内容?

    @echo off
    python %VIRTUAL_ENV%\Scripts\django-admin.py %*
    

    现在您可以使用django-admin startproject <project_name>。必要的PATHVIRTUAL_ENV 环境变量应该在您激活环境时已经被virtualenv 正确设置。

    【讨论】:

      【解决方案4】:

      我使用了 Philip Nelson 的解决方案,但必须在我的文件名中为空格添加引号:

      python "%VIRTUAL_ENV%\Scripts\django-admin.py" %*

      【讨论】:

        【解决方案5】:

        我只是输入了 django-admin,没有 .py 文件扩展名,并且为我工作。

        【讨论】:

          【解决方案6】:

          我必须在我的项目中将“global python.exe”指向我的 virtualenv,所以我创建了自己的 activate.cmd

          set THE_PATH=c:\my-envs\my-specific-env\Scripts
          ftype Python.File="%THE_PATH%\python.exe" %%1 %%*
          %THE_PATH%\activate.bat
          

          它使用 windows 命令“ftype”更改文件类型关联。

          【讨论】:

            猜你喜欢
            • 2011-10-05
            • 1970-01-01
            • 1970-01-01
            • 2011-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-25
            • 1970-01-01
            相关资源
            最近更新 更多