2016-10-27 3 views
2

Для всех хороших парней, которые пытаются начать работу с докерером. Я запускаю OS X El Capitan (10.11).docker-compose startup error не может импортировать имя _thread

Система поставляется с python 2.7. Попытка заменить системный python на python 3 не рекомендуется, потому что многие основные системы зависят от библиотек python 2.

Установлен «Докер» для Mac и «докер-составление» с помощью докера в командной строке.

Переход к терминалу: 'Докер-Compose --version' бросает ошибку:

admins-MacBook-Pro-63:~ apil.tamang$ docker-compose --version 
Traceback (most recent call last): 
    File "/usr/local/bin/docker-compose", line 9, in <module> 
    load_entry_point('docker-compose==1.8.1', 'console_scripts', 'docker-compose')() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 357, in load_entry_point 
    return get_distribution(dist).load_entry_point(group, name) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2394, in load_entry_point 
    return ep.load() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2108, in load 
    entry = __import__(self.module_name, globals(),globals(), ['__name__']) 
    File "/Library/Python/2.7/site-packages/compose/cli/main.py", line 17, in <module> 
    from ..bundle import get_image_digests 
    File "/Library/Python/2.7/site-packages/compose/bundle.py", line 14, in <module> 
    from .service import format_environment 
    File "/Library/Python/2.7/site-packages/compose/service.py", line 31, in <module> 
    from .parallel import parallel_execute 
    File "/Library/Python/2.7/site-packages/compose/parallel.py", line 10, in <module> 
    from six.moves import _thread as thread 
ImportError: cannot import name _thread 

Что вы делаете? Просто установить python3 не исправить!

+0

Вы использовали первый Compose команды установки показано [здесь] (https://docs.docker.com/compose/install/#/install-docker-compose) правильно? – idjaw

+0

Я не уверен, какой метод я использовал. Вероятно, он использовал pip, поскольку это кажется самым прямым способом. –

+0

Да, вы устанавливаете систему на уровне системы, используя Python по умолчанию. Это ваше намерение? Я бы предложил сделать это в virtualenv вместо этого. Вы * упоминали, что хотите сделать это в python 3. Итак, почему бы просто не настроить виртуальный диск на python 3 и установить вместо этого pipenv вместо этого virtualenv? – idjaw

ответ

0

Ошибка связана с тем, что python не может найти «шесть» модулей. Сначала я сделал:

sudo pip install six -U //updates the six modules in python 

Это не помогло лучше, так что я сделал следующее из моего терминала:

python -c 'import six; print(six.__version__)' 

Для меня это распечатывается следующее:

/usr/local/bin/python2.7/site-packages/ 

вот что мне известно, где мои шесть модулей были расположены. Теперь, если вы посмотрите на стек ошибок из python, который я разместил в начале этого вопроса, вы увидите, что все действия происходят в папке: /Library/Python/2.7/site-packages. Это был AHAA! момент для меня. По какой-то причине в этой папке были установлены файлы python, содержащие docker, и НЕ в моем путём python системы (то есть/usr/local/bin/python). Я не имею понятия почему!

Тогда мне пришлось скопировать six.py и six.pyc в/Library, используя следующую команду:

cp /usr/local/bin/python2.7/site-packages/six.* /Library/Python/2.7/site-packages 

Делают немного исследования здесь, ребята, не сдавайтесь! Не слепо вводите команды выше. Короче говоря, копирование файла в /Library/Python/2.7/site-packages делает сделку, и теперь я нахожусь на пути к использованию docker-compose.

+0

Я бы, вероятно, не стал изменять системный уровень Python 2.7. Это одно требование для ОС. Идеальный подход здесь состоял бы в том, чтобы, вероятно, использовать virtualenv, чтобы не загрязнять системное пространство. – idjaw

+0

@idjaw Когда вы имели в виду «системный» уровень Python, вы имеете в виду один в /usr/local/bin/python2.7/ .. «да? Я предположил, что для меня был системный питон.Я прочитал еще пару других тем об обновлении «шести» модулей, и никто, похоже, не имел никаких проблем. –

+0

В ретроспективе вся цель модулей «шесть», по-видимому, позволяет python 2 взаимодействовать с зависимыми от python библиотеками. Следовательно, по крайней мере с этим (модуль «шесть»), я предполагаю, что обновление не будет рискованным. Ну .. давай просто подождем и узнаем! Кроме того, я не знал о «virtualenv», но если бы мне пришлось вернуться и переделать его, как вы сказали, я мог бы преследовать последнего сейчас. –

0
sudo pip install --ignore-installed six 

source

+0

Хотя этот код может решить проблему, хороший ответ также должен содержать объяснение. – BDL