"из gtts import gTTS" прекрасно работает в python 2.7, но не работает в python 3.5. Зачем?

Я хочу выполнить этот код:

from gtts import gTTS
tts = gTTS('hello', lang='en')
tts.save('hello.mp3')

В python (python 2.7.13) работает нормально, но в python3 (python 3.5.3) не работает.

Это всегда работало в старом питоне. Теперь на новом ПК (малина) я хотел начать использовать python3 (3.5.3), поэтому я попытался, и это не сработало.

Поскольку это была новая установка, возможно, gtts не был установлен, поэтому я установил с:

pi@raspberrypi:~ $ pip install gTTS

У меня было это:

Collecting gTTS
Downloading
...
...
...
Successfully built gTTS bs4 gtts-token
Installing collected packages: backports.functools-lru-cache, soupsieve, beautifulsoup4, bs4, click, idna, chardet, certifi, urllib3, requests, gtts-token, six, gTTS
Successfully installed backports.functools-lru-cache-1.5 beautifulsoup4-4.7.1 bs4-0.0.1 certifi-2019.3.9 chardet-3.0.4 click-7.0 gTTS-2.0.3 gtts-token-1.1.3 idna-2.8 requests-2.22.0 six-1.12.0 soupsieve-1.9.1 urllib3-1.25.2
pi@raspberrypi:/home $ 

Я попробовал еще раз, и это не сработало. Я пытался со старой версией 2.7, и, к моему удивлению, она работала.

Работа в питоне:

pi@raspberrypi:/ $ python
Python 2.7.13 (default, Sep 26 2018, 18:42:22) 
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from gtts import gTTS
>>> 

Не работает в python3

pi@raspberrypi:~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from gtts import gTTS
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'gtts'
>>> 

Затем я заметил, что есть pip3! Когда я делаю

pi@raspberrypi:~ $ sudo pip3 install gTTS

gTTS там нет, так что я сделал

pi@raspberrypi:~ $ sudo pip3 install gTTS

Но после этого я получаю красный текст и сообщение об ошибке

 File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 643, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 315, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

Когда я снова проверяю список пипсов, gTTS все еще не существует... Есть идеи? Спасибо

1 ответ

Решение

Вы жалуетесь, что вы запустили определенного интерпретатора и увидели:

from gtts import gTTS
...
ImportError: No module named 'gtts'

или более кратко:

import gtts
...
ImportError: No module named 'gtts'

Сложность в том, что вы никогда не устанавливали gtts для этого интерпретатора.

Да, ты побежал pip (или эквивалентно, pip2), который предлагает потрясающий сервис для вашего интерпретатора python2.7. Нет, ты никогда не бегал pip3, что может хорошо работать для вашего интерпретатора Python3.5.

Вероятно, было бы лучше вызвать его следующим образом:

$ python3 -m pip install gTTS

Тогда вы совершенно уверены, что sys.path будет во время установки, и что пакет приземлится в нужном месте для import найти его.

В качестве отдельного элемента 3.5 немного устарел, рассмотрите возможность использования более новой версии.

Другие вопросы по тегам