Django 1.9a1 __init__.py在eclipse/PyDev中可见,即使它应该被删除(Windows)

OBu*_*OBu 8 python eclipse windows django pydev

我在这里有一个奇怪的行为:

我刚刚使用pip从Django 1.9a1升级到Django 1.9.4.安装顺利,Django运行顺利,但在启动时,它仍显示版本号"1.9a1".

只是为了确保我再次使用pip卸载Django并确认我的django文件夹不再存在于C:\ Program Files(x86)\ Python 3.5\lib\site-packages中(既不是"django"也不是"Django-1.9") .4"文件夹).

再次启动服务器后,我很惊讶地看到了错误消息

from django.core.management import execute_from_command_line
File "C:\Program Files (x86)\Python 3.5\lib\site-packages\django\__init__.py", line 1, in <module>
from django.utils.version import get_version
ImportError: No module named 'django.utils'
Run Code Online (Sandbox Code Playgroud)

我预计错误会像"未找到包django"或类似.由于eclipse提供了文件名作为链接,我点击了它,eclipse打开了一个包含内容的文件

from django.utils.version import get_version
VERSION = (1, 9, 0, 'alpha', 1)
__version__ = get_version(VERSION)
[...]
Run Code Online (Sandbox Code Playgroud)

我仔细检查了这个文件是不是通过命令行和Windows资源管理器提供的.

这个文件在哪里,我怎么能摆脱它?或者它是自动生成的(如果是,我该如何纠正这种机制)

还是我错过了一些完全明显的东西?

附加信息:我重新安装了位于C:\ Program Files(x86)\ Python 3.5\lib\site-packages\django__init __的Django 1.9.4和init .py文件.py显示正确的版本信息.但是,如果我运行Django项目,给出的版本信息是1.9a1.

即使我打开cmd提示并输入

python -c "import django; print(django.get_version())"
Run Code Online (Sandbox Code Playgroud)

答案是1.9a1

更新2016-03-13 17:57:我再次卸载并使用了alecxe建议的显式== 1.9.4.这解决了部分问题:现在,如果我打开命令行,

python -c "import django; print(django.get_version())"
Run Code Online (Sandbox Code Playgroud)

给了我正确答案(1.9.4).但是在Eclipse/PyDev中,我的项目不再开始了.第一条错误消息是:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x03F72108>
Traceback (most recent call last):
  File "C:\Program Files (x86)\Python 3.5\lib\site-packages\django\apps\config.py", line 118, in create
    cls = getattr(mod, cls_name)
AttributeError: module 'django.contrib' has no attribute 'admin'
Run Code Online (Sandbox Code Playgroud)

当然,admin模块存在于文件系统中.

为了检查,我在控制台中启动了一个新项目

django-admin startproject mysite
Run Code Online (Sandbox Code Playgroud)

并且成功创建了新项目.

当我在Eclipse中使用PyDev来启动一个新项目(使用"new"/"PyDev Django Project")时,该过程失败了!创建项目目录以及manage.py,但项目目录为空(没有init .py,settings.py,urls.py,wsgi.py).

看起来Eclipse/PyDev没有使用正确的django安装,即使给出的所有文件名都是正确的.是否可能涉及任何缓存?是的,重新安装后我重新启动了Eclipse.

附加信息2016-03-14 17:44:我只是重新启动了我的电脑,令人惊讶的是,我的eclips现在能够再次运行我的项目 - 上面描述的错误消失了,但显示的django版本号再次是1.9a1!现在我启动了命令提示符,并python -c "import django; print(django.get_version())"再次给了我1.9a1!我接下来做的是再次以管理员身份启动命令提示符 - tataa - 我得到了1.9.4.

因此问题似乎与管理员权限有关,这可能是由于安装python所致C:\Program Files (x86)\Python 3.5.我使用了控制台窗口,其中包含上述所有pip安装/卸载的管理员权限.是否有一些Windows机制可以解释这种行为?

解决方案2016-03-14 18:17: 我现在在我的整个C:驱动器中搜索包含"django"的文件夹,我发现其中一个

C:\Users\[my_username]\AppData\Local\VirtualStore\Program Files (x86)\Python 3.5\Lib\site-packages\django

- 惊喜 - 它包含带有错误版本号的init .py文件.因此,似乎我安装了没有管理员权限的1.9a1,eclipse总是使用此版本,因为它也是在没有管理员权限的情况下启动的.在对Windows VirtualStore进行一些研究后,我决定手动删除整个C:\Users\[my_username]\AppData\Local\VirtualStore\Program Files (x86)\Python 3.5文件夹.

紧接着,我的cmd窗口显示版本1.9.4,独立于管理员或非管理员模式.而且 - 最重要的是 - 当我在eclipse中运行我的django项目时,它也显示了正确的版本号.可以肯定的是,我使用PyDev向导创建了一个新的django项目,所有项目文件都是正确创建的.

总而言之,问题是由于先前安装了没有管理员权限的django,然后是带有管理员权限的django安装.负责机制是Windows VirtualStore,而不是Eclipse或PyDev.

我将保留我的Odyssee的完整描述,也许它可以帮助某人找到主题.我将在下面给出简短的总结答案.

OBu*_*OBu 4

长话短说如上所述,简短的回答是:

我在我的文件夹中额外安装了 django C:\Users\[my_username]\AppData\Local\VirtualStore\Program Files (x86)\Python 3.5\Lib\site-packages\django。这是由于在没有管理员权限的情况下安装了 1.9a1 版本。

由于 eclipse 也在没有管理员权限的情况下访问 django,因此它使用的是过时的版本,而不是使用具有管理员权限的 pip 安装的最新版本。

我删除了该C:\Users\[my_username]\AppData\Local\VirtualStore\Program Files (x86)\Python 3.5文件夹,重新启动 Eclipse 后一切正常。