2013-11-19 5 views
0

Из того, что я узнал из моих исследований здесь и в других местах, кажется, что если a) модуль находится в пути поиска Python или b) содержится в пакете, который находится в путь поиска Python, чтобы команда импорта могла находить и импортировать модуль.Ошибка модуля модуля Python (http.cookies)

В интерактивном скрипте ниже обратите внимание, что оба этих условия выполнены. папка http содержит файл __init__.py, что делает его пакетом, и эта папка содержит модуль с именем cookie.py. Тем не менее, команда import http.cookies не работает, и трассировка выглядит так: Python ищет этот модуль в папках django, который, как я знаю, не будет работать, поскольку в папке пакета django http отсутствует файл cookie.py. Я также попытался манипулировать поисковым путем, отредактировав свой PYTHONPATH, чтобы гарантировать, что папка http-пакетов стандартной библиотеки ранее в пути поиска, но, как вы можете видеть ниже, импорт все еще не работает.

Что вызывает этот отказ?

Python 3.3.1 (v3.3.1:d9893d13c628, Apr 6 2013, 20:25:12) [MSC v.1600 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> import sys 
>>> for item in sys.path: print(item) 


C:\Python33\Lib\idlelib 
C:\Python33\lib\site-packages\setuptools-1.1.7-py3.3.egg 
c:\Python33\Lib\http 
C:\Python33\Lib\site-packages 
C:\Python33\Lib\site-packages\django 
C:\Python33\Lib\site-packages\django\bin 
C:\Windows\system32\python33.zip 
C:\Python33\DLLs 
C:\Python33\lib 
C:\Python33 
C:\Python33\lib\site-packages\win32 
C:\Python33\lib\site-packages\win32\lib 
C:\Python33\lib\site-packages\Pythonwin 
>>> import os 
>>> os.path.isfile('C:/Python33/Lib/http/__init__.py') 
True 
>>> os.path.isfile('C:/Python33/Lib/http/cookies.py') 
True 
>>> import http.cookies 
Traceback (most recent call last): 
    File "<pyshell#6>", line 1, in <module> 
    import http.cookies 
    File "C:\Python33\Lib\site-packages\django\http\__init__.py", line 1, in <module> 
    from django.http.cookie import SimpleCookie, parse_cookie 
    File "C:\Python33\Lib\site-packages\django\http\__init__.py", line 1, in <module> 
    from django.http.cookie import SimpleCookie, parse_cookie 
    File "C:\Python33\Lib\site-packages\django\http\cookie.py", line 5, in <module> 
    from django.utils.six.moves import http_cookies 
    File "C:\Python33\Lib\site-packages\django\utils\six.py", line 86, in __get__ 
    result = self._resolve() 
    File "C:\Python33\Lib\site-packages\django\utils\six.py", line 105, in _resolve 
    return _import_module(self.mod) 
    File "C:\Python33\Lib\site-packages\django\utils\six.py", line 76, in _import_module 
    __import__(name) 
ImportError: No module named 'http.cookies' 
>>> 

ответ

2

Вы добавили пакет верхнего уровня Джанго к вашему sys.path:

C:\Python33\Lib\site-packages\django 

Удалить эту запись, и не добавлять пакеты верхнего уровня на вашем пути. Сначала Python находит пакет верхнего уровня http в этом каталоге, поэтому теперь вы фактически импортируете пакет django.http, который не имеет модуль cookies.

Вы должны добавить только родительский каталог пакета на ваш путь. C:\Python33\Lib\site-packages и C:\Python33\Lib оба уже в списке, так что вы не нужно одно из следующих действий:

c:\Python33\Lib\http 
C:\Python33\Lib\site-packages\django 
C:\Python33\Lib\site-packages\django\bin 
C:\Python33\lib\site-packages\win32 
C:\Python33\lib\site-packages\win32\lib 
C:\Python33\lib\site-packages\Pythonwin 
+0

Отлично! Тот факт, что _parent directory_ пакетов должен находиться в пути поиска, ** не ** каталог пакетов каким-то образом полностью убежал от меня. Спасибо @Martijn !! –

Смежные вопросы