【问题标题】:Virtualenv keeps loading global site packages on WindowsVirtualenv 不断在 Windows 上加载全局站点包
【发布时间】:2011-05-05 23:50:28
【问题描述】:

我环顾四周,发现我的问题的答案还没有让我解决它。

我想使用隔离的 virtualenv 环境,但由于某种原因,virtualenv 在 django 的 shell 中不断加载全局站点包...

我试图清理 PATH 变量,直到只剩下 c:\Python26\Scripts 和 c:\Python26。然后我创建我的环境。

virtualenv --distribute --no-site-packages myproject

然后我激活 virtualenv。 PATH 现在是(不相关的变量废弃):

PATH=E:\Development\django_projects\myproject\Scripts;C:\Panda3D-1.7.0\python;C:\Panda3D-1.7.0\bin;c:\python26\Scripts;

PYTHONPATH=C:\Panda3D-1.7.0\

到目前为止,一切都很好。我启动 python...

>>> import django
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ImportError: No module named django

让我们尝试一个我确定在我的 c:\python site-packages 目录中的模块。

>>> import BeautifulSoup
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named BeautifulSoup

耶!没有全球站点包!那就去下一个吧。在命令提示符下,我输入:

django-admin.py

而且它有效!但是等等……我还没有安装 Django。这怎么可能?

在这之后,它变得更加奇怪......我首先将这些添加到 virtualenv 的 activate.bat 脚本中,以便 Django 可以找到我的设置。

set PYTHONPATH=E:\Development\django_projects\myproject\
set DJANGO_SETTINGS_MODULE=settings.development

现在我启动 django-admin.py shell 和

In [1]: import BeautifulSoup
In [2]: BeautifulSoup.__file__
Out[2]: 'C:\\Python26\\lib\\site-packages\\BeautifulSoup.pyc'

这怎么可能?

顿悟

在打字的时候,我突然明白了。 .py 是与我的 c:\python26\python.exe 可执行文件相结合的文件扩展名,而不是 virtualenv !

python manage.py
Traceback (most recent call last):
  File "manage.py", line 2, in <module>
    from django.core.management import execute_manager
ImportError: No module named django.core.management

呵呵。任何人都知道如何将 .py 文件扩展名耦合到我的 virtualenv 的 python 可执行文件而不是系统定义的 python 可执行文件?

【问题讨论】:

标签: windows virtualenv


【解决方案1】:

一点点额外的 .bat 黑客可以轻松解决此问题。我对 activate.bat 的标准补充是:

REM custom venv settings
set PYTHONPATH=%\VIRTUAL_ENV%;%\VIRTUAL_ENV%\conf;%\VIRTUAL_ENV%\apps
set DJANGO_SETTINGS_MODULE=settings

ftype Python.File=%VIRTUAL_ENV%\Scripts\python.exe %1 %*

并停用.bat

REM restore ftype
ftype Python.File=C:\tools\Python27\python.exe %1 %*

【讨论】:

  • 以下行“set PYTHONPATH=%\VIRTUAL_ENV%;%\VIRTUAL_ENV%\conf;%\VIRTUAL_ENV%\apps”中是否有一些额外的\字符?它不应该是:“set PYTHONPATH=%VIRTUAL_ENV%;%VIRTUAL_ENV%\conf;%VIRTUAL_ENV%\apps”吗?
  • 另外... 在 Windows 批处理文件中,您需要转义 ftype 命令的 % 字符。 "ftype Python.File=C:\tools\Python27\python.exe %%1 %%*"
  • 当我运行 ftype 行时,我得到一个错误“访问被拒绝。处理时出错:Python.File。”
【解决方案2】:

您可以创建一个 .bat 文件并在其中修改 PATH 和 PYTHONPATH,然后从该 .bat 文件运行 .py。 我想是这样的

set PATH=C:\Python26; python myfile.py

当然,在你的路径中添加任何你想要的东西。

【讨论】:

    【解决方案3】:

    我在使用 cmd.exe 安装 Windows 7 时遇到了与 Dan 相同的“访问被拒绝”问题。

    但我发现使用替换 shell TCC/LE 和自定义启动文件来解决这个问题...

    在工作目录下创建子目录配置。在这个目录中 为 TCC/LE 创建名为 tcstart.btm 的启动文件

    @echo off
    rem Override system python binding to handle virtualenvironments
    set .py;.pyc=python.exe
    

    现在在桌面上创建(复制)TCC/LE 快捷方式并重命名它 适当地。打开快捷方式的属性并添加到目标 “C:\django\config\tcstart.btm”。您可能希望将 Start in 设置为 有用的东西,比如 C:\django

    在本指南中找到关于安装Django and Windows 的解决方案。

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2012-09-08
      相关资源
      最近更新 更多