2016-05-21 15 views
7

Nie można importować niczego z sześciu. Obie te linie uzyskując błędy:Nie można importować z biblioteki Python Six

from six.moves.urllib.request import urlretrieve 

->Unresolved reference "urlretrieve"

from six.moves import cPickle as pickle 

->Unresolved reference "cPickle"

OSX 10.11.5. IntelliJ 2016.1.2, PyCharm 2016.1.3, Python 2.7.11, Six 1.10.0.

Co zrobiłem, aby spróbować naprawić (na PyCharm shows unresolved references error for valid code i innych stanowisk):

  • Switched tłumaczy Python
  • IntelliJ: usunięty plik pomysł
  • IDE -> Unieważnij skrzynek/Restart
  • stworzył zupełnie nowy projekt z tego samego źródła
  • Switched (IDE IntelliJ -> pycharm)
  • Zweryfikowane sześć jest aktualna:

_

$ sudo pip install -U six 
Requirement already up-to-date: six in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/six-1.10.0-py2.7.egg 

Python SDK Próbowałem:

Python 2.7.11 (/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7) 
Python 3.5.1 (/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5) 
Python 2.7.10 (/usr/local/bin/python2.7) 

Nic nie działało. Pomoc byłaby mile widziana! Dzięki.

---------- Aktualizacja 23 maja 2016 r. -------------------------------

Uruchamianie wierszy importowanych z wiersza poleceń "from six.moves ..." nie powoduje błędów. Wiersz poleceń wywołuje Python 2.7.11. PyCharm również używa Pythona 2.7.11, a PyCharm pokazuje również, że sześć jest dostępnych - zobacz pierwsze zrzuty ekranu. W projekcie nie ma plików .pyc, tylko main.py. enter image description here Dziwne, main.py działa bez błędów w PyCharm; linia "Hello" jest drukowana (patrz drugi zrzut ekranu). File runs OK Ten zrzut ekranu pokazuje interpreter projektu w ustawieniach: enter image description here Nadal jestem zakłopotany.

---------- Aktualizacja 24 maja 2016 r. -----------------------------

import six działa bezbłędnie w kodzie i powłoce pythona, a po wykonaniu sześć. plik = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/six-1.10.0-py2.7.egg/six.pyc. Jednak IDE PyCharm nadal pokazuje błędy w wierszach importu six.moves.

+0

Czy linie wyświetlane są w kodzie, który próbujesz wczytać i uruchomić? Czy próbowałeś po prostu wpisać te linie do powłoki Pythona? –

+0

Tak, powyższe linie importu są w kodzie, który chcę uruchomić. Jeszcze nie wprowadziłem kodu operacyjnego, starałem się, aby cały import działał jako pierwszy. Ten kod pochodzi z samouczka Google Tensorflow. Kiedy wpisuję te linie w powłokę Pythona, nie dostaję żadnego błędu, więc może są to tylko ostrzeżenia, które mogę zignorować, jak sugeruje Burhan poniżej? –

+0

Tak więc, Burhan mówi, że musisz uruchomić interpreter Pythona, który zna około sześciu, aby go zaimportować. Najwyraźniej jest to ten, który dostajesz po uruchomieniu powłoki z wiersza poleceń. Musisz dowiedzieć się, jak utworzyć PyCharm lub IntelliJ lub jakiekolwiek narzędzie, którego chcesz użyć, uruchomić interpreter, który zna około sześciu, aby import mógł zadziałać. Jeśli jest to wspomniany przez niego problem z pamięcią podręczną, błąd powinien zniknąć po ponownym utworzeniu pamięci podręcznej. Spróbuj usunąć pliki o nazwach * .pyc i katalogi o nazwie __pycache__ i sprawdź, czy to pomaga. –

Odpowiedz

1

To pytanie wydaje się być odpowiedzią na this one (nie wiem, jak oznaczyć tę jako duplikat).

Niestety, nie ma rozwiązania easy ze względu na dynamiczny charakter modułu "sześć", chyba że zaimplementujesz swój własny szkielet dla tego modułu (co nie jest proste).

1

six jest zainstalowany tylko na /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7, więc to będzie działać tylko wtedy, gdy używasz tego tłumacza w pycharm/IntelliJ

Uwaga, w przypadku utworzenia nowego wirtualnego środowiska, musisz zainstalować six w nim oddzielnie.

Jeśli PyCharm/IntelliJ poda ci te ostrzeżenia, ale kod faktycznie działa - to jest tylko kwestia buforowania z PyCharm i możesz spokojnie zignorować to - są szanse na ponowne odbudowanie pamięci podręcznej PyCharm zaktualizuje swoją pamięć podręczną.

0

Możesz użyć importu sześciu zamiast z sześciu. Importuj cPickle, a następnie użyj six.moves.cPickle.

To działa dla mnie.

Powiązane problemy