2016-03-10 22 views
8

Tôi đang gặp một hành vi kỳ lạ ở đây:Django 1.9a1 __init__.py có thể nhìn thấy trong eclipse/PyDev mặc dù nó cần xóa (Windows)

Tôi chỉ nâng cấp lên 1.9.4 Django từ Django 1.9a1 sử dụng pip. Việc cài đặt đã đi tốt và Django đã chạy trơn tru, nhưng trong thời gian khởi động, nó vẫn cho thấy số phiên bản "1.9a1".

Chỉ cần chắc chắn rằng tôi đã gỡ cài đặt Django lần nữa bằng pip và xác nhận rằng thư mục django của tôi không còn tồn tại trong C: \ Program Files (x86) \ Python 3.5 \ lib \ site-packages (không phải là "django" cũng không phải "Django-1.9.4" thư mục).

Sau khi khởi động máy chủ một lần nữa, tôi rất ngạc nhiên khi đọc được thông báo lỗi

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' 

tôi mong đợi các lỗi để được một cái gì đó như "gói Django không tìm thấy" hoặc tương tự. Kể từ khi nhật thực toàn phần cung cấp tên tập tin như liên kết, tôi nhấp vào nó một nhật thực đã mở một tập tin với nội dung

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

tôi kiểm tra lại rằng tập tin này là không có sẵn thông qua dòng lệnh và qua cửa sổ nhà thám hiểm.

Tệp này nằm ở đâu và làm thế nào tôi có thể loại bỏ nó? Hoặc nó được tạo tự động (và nếu có, làm thế nào tôi có thể sửa cơ chế này)

Hoặc tôi thiếu một điều gì đó hoàn toàn hiển nhiên?

Thông tin thêm: tôi cài đặt lại Django 1.9.4 và init tập tin py nằm tại C:. \ Program Files (x86) \ Python 3.5 \ lib \ site-packages \ django__init __ py thấy phiên bản đúng thông tin. Tuy nhiên, nếu tôi chạy một dự án Django, thông tin phiên bản được đưa ra là 1.9a1.

Ngay cả khi tôi mở một dấu nhắc cmd và nhập

python -c "import django; print(django.get_version())" 

câu trả lời là 1.9a1

Cập nhật 2016/03/13 17:57: tôi gỡ bỏ cài đặt một lần nữa và sử dụng == rõ ràng 1.9 .4 được đề xuất bởi alecxe. Điều này giải quyết được một phần vấn đề: Bây giờ, nếu tôi mở dòng lệnh,

python -c "import django; print(django.get_version())" 

cung cấp cho tôi câu trả lời đúng (1.9.4). Nhưng trong Eclipse/PyDev, dự án của tôi không còn bắt đầu. Thông báo lỗi đầu tiên là:

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' 

Tất nhiên, mô-đun admin hiện có trên hệ thống tệp.

Chỉ cần để kiểm tra, tôi bắt đầu một dự án mới trong giao diện điều khiển sử dụng

django-admin startproject mysite 

và dự án mới được thành công tạo ra.

Khi tôi sử dụng PyDev bên trong Eclipse để bắt đầu một dự án mới (sử dụng "mới"/"PyDev Django Project"), quá trình này không thành công! Thư mục dự án cũng như manage.py được tạo nhưng thư mục dự án trống (không có init .py, settings.py, urls.py, wsgi.py).

Có vẻ như Eclipse/PyDev không sử dụng đúng cài đặt django, mặc dù tất cả các tên tệp được cung cấp là đúng. Có thể có bất kỳ bộ nhớ đệm nào có liên quan không? Và có, tôi đã bắt đầu lại Eclipse sau khi cài đặt lại.

Thông tin bổ sung 2016-03-14 17:44: Tôi vừa mới khởi động lại máy tính và ngạc nhiên, nhật thực của tôi giờ đây có thể chạy lại dự án của tôi - lỗi được mô tả ở trên biến mất, NHƯNG số phiên bản django được hiển thị 1.9a1 một lần nữa! Bây giờ tôi đã kích hoạt nhắc lệnh và python -c "import django; print(django.get_version())" cũng cho tôi 1.9a1 một lần nữa! Những gì tôi đã làm tiếp theo là để bắt đầu nhắc lệnh một lần nữa như là quản trị viên và - tataa - Tôi có một 1.9.4.

Vì vậy, vấn đề dường như liên quan đến đặc quyền quản trị có thể là do cài đặt python trong C:\Program Files (x86)\Python 3.5. Tôi đã sử dụng cửa sổ giao diện điều khiển với quyền quản trị cho tất cả cài đặt/gỡ cài đặt pip được mô tả ở trên. Có một số cơ chế cửa sổ có thể giải thích hành vi này?

Solution 2016/03/14 18:17: bây giờ tôi đã tìm kiếm toàn bộ C của tôi: lái xe cho các thư mục có chứa "django", và tôi thấy một trong

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

và - sự ngạc nhiên bất ngờ - chứa tệp init .py với số phiên bản sai. Vì vậy, có vẻ như tôi đã cài đặt 1.9a1 mà không có đặc quyền quản trị và nhật thực luôn sử dụng phiên bản này vì nó được bắt đầu mà không có đặc quyền quản trị viên. Sau khi một số nghiên cứu về Windows VirtualStore, tôi quyết định xóa toàn bộ thư mục C:\Users\[my_username]\AppData\Local\VirtualStore\Program Files (x86)\Python 3.5 theo cách thủ công.

Ngay sau đó, cửa sổ cmd của tôi hiển thị cho tôi phiên bản 1.9.4, độc lập với chế độ quản trị viên hoặc không phải quản trị viên. Và - quan trọng nhất - khi tôi chạy dự án django của tôi trong nhật thực, nó cũng cho thấy số phiên bản chính xác. Để chắc chắn, tôi đã tạo một dự án django mới bằng trình hướng dẫn PyDev và tất cả các tệp dự án đã được tạo chính xác.

Vì vậy, tóm lại, vấn đề là do cài đặt trước đó của django mà không có quyền quản trị, tiếp theo là cài đặt django với quyền quản trị. Cơ chế chịu trách nhiệm là Windows VirtualStore, không phải Eclipse hay PyDev.

Tôi sẽ để lại toàn bộ mô tả về Odyssee của tôi, có thể giúp ai đó tìm chủ đề. Tôi sẽ đưa ra một câu trả lời tóm tắt ngắn dưới đây.

Trả lời

4

Câu chuyện dài được mô tả ở trên, câu trả lời ngắn gọn là:

Tôi đã có một cài đặt thêm django trong thư mục C:\Users\[my_username]\AppData\Local\VirtualStore\Program Files (x86)\Python 3.5\Lib\site-packages\django tôi. Điều này là do cài đặt phiên bản 1.9a1 mà không có quyền quản trị.

Vì nhật thực đang truy cập django mà không có quyền quản trị, nó sử dụng phiên bản lỗi thời, và không phải là phiên bản gần đây đã được cài đặt pip usind với rigths quản trị.

Tôi đã xóa thư mục C:\Users\[my_username]\AppData\Local\VirtualStore\Program Files (x86)\Python 3.5 và sau khi khởi động lại mọi thứ đã hoạt động.

+0

Câu chuyện thú vị - cảm ơn bạn đã chia sẻ! Tôi sẽ để lại câu trả lời trong trường hợp bất cứ ai sẽ có một vấn đề tương tự trong tương lai. – alecxe

+0

Điều này sẽ được khắc phục trong phiên bản 32-bit 3.5.1 (các chương trình 64 bit không bao giờ bị ảnh hưởng). Bản phát hành đầu tiên của 3.5 không được biểu hiện đúng cách, nhưng với 3.5.1 cài đặt pip sẽ thất bại nếu bạn không thể truy cập các gói trang web, thay vì được chuyển hướng âm thầm đến thư mục 'VirtualStore' của người dùng. – eryksun

+0

cảm ơn thông tin erkyksun! Tôi nghĩ rằng tôi đã thực hiện cài đặt cũ bằng cách sử dụng 3.5.0, và tôi nhớ đã cài đặt thất bại với các phiên bản mới hơn của python. Vì vậy, tôi hy vọng không có quá nhiều người bị ảnh hưởng bởi điều này. Và nó là tốt để biết vấn đề là cố định. – OBu

1

Những gì tôi nhớ đã giúp tôi trong một trường hợp tương tự đã gỡ bỏ cài đặt Django hoàn toàn và cài đặt nó trên một lần nữa:

pip uninstall django 
pip install django==1.9.4 

Bạn cũng có thể cần phải kiểm tra và tự loại bỏ django thư mục và tập tin trứng nếu nó là còn lại trong thư mục C:\Program Files (x86)\Python 3.5\lib\site-packages sau khi gỡ cài đặt django qua pip.

+0

Tôi đã làm như vậy trước đây, nhưng không có "== 1.9.4" - với phiên bản của bạn, tôi nhận được số phiên bản chính xác trên dòng lệnh, nhưng dự án của tôi không còn bắt đầu: Ngoại lệ chưa xử lý trong chuỗi được bắt đầu bởi < chức năng check_errors. .wrapper tại 0x03F72108> Traceback (cuộc gọi gần đây nhất): Tệp "C: \ Program Files (x86) \ Python 3.5 \ lib \ site-packages \ django \ apps \ config.py", dòng 118, trong tạo cls = getattr (mod, cls_name) Thuộc tínhError: module 'django.contrib' không có thuộc tính 'admin' Khi tôi kiểm tra hệ thống tệp, contrib chứa thư mục quản trị với tất cả các tệp cần thiết. – OBu

+0

@OBu cảm ơn vì đã thử điều đó. Bạn có chắc chắn thực thi 'pip' trong trường hợp của bạn đề cập đến' pip' được cài đặt trong môi trường Python 3.5 không? – alecxe

+0

'nơi pip' cung cấp cho tôi C: \ Program Files (x86) \ Python 3.5 \ Scripts \ pip.exe - đó là cài đặt python 3 của tôi. Và tôi chỉ có một cài đặt python (không virtualenv, không có python 2, ...). BTW: Tôi đã cập nhật câu hỏi một chút để phản ánh những điều mới nhất mà tôi đã thử – OBu

Các vấn đề liên quan