Установка tenorflow в клонированной среде conda нарушает среду conda, из которой он был клонирован

Я только что клонировал рабочую среду Miniconda carnd-term1-gpu Тензорный поток с gpu, работающим с использованием версии тензорного потока "0.12.1". В среде было установлено много других пакетов Python. Я хотел обновить до последней версии tenorflow, поэтому я сделал следующее на основе Ubuntu Tensflow:

1) клонировали существующую рабочую среду как tflow

conda create --name tflow --clone carnd-term1-gpu

Это успешно завершено.

2) источник активировать tflow и установить с помощью pip

source activate tflow
(tflow) xx@pc:~$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp35-cp35m-linux_x86_64.whl

Теперь я пытаюсь запустить старую среду, предполагая, что она не должна быть изменена.

source activate carnd-term1-gpu
ipython

Затем из подсказки ipython введите import numpy as np и получите следующее:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-4ee716103900> in <module>()
----> 1 import numpy as np

/home/ai/miniconda3/envs/carnd-term1-gpu/lib/python3.5/site-packages/numpy/__init__.py in <module>()
    140         return loader(*packages, **options)
    141 
--> 142     from . import add_newdocs
    143     __all__ = ['add_newdocs',
    144                'ModuleDeprecationWarning',

/home/ai/miniconda3/envs/carnd-term1-gpu/lib/python3.5/site-packages/numpy/add_newdocs.py in <module>()
     11 from __future__ import division, absolute_import, print_function
     12 
---> 13 from numpy.lib import add_newdoc
     14 
     15 ###############################################################################

/home/ai/miniconda3/envs/carnd-term1-gpu/lib/python3.5/site-packages/numpy/lib/__init__.py in <module>()
      6 from numpy.version import version as __version__
      7 
----> 8 from .type_check import *
      9 from .index_tricks import *
     10 from .function_base import *

/home/ai/miniconda3/envs/carnd-term1-gpu/lib/python3.5/site-packages/numpy/lib/type_check.py in <module>()
      9            'common_type']
     10 
---> 11 import numpy.core.numeric as _nx
     12 from numpy.core.numeric import asarray, asanyarray, array, isnan, \
     13                 obj2sctype, zeros

/home/ai/miniconda3/envs/carnd-term1-gpu/lib/python3.5/site-packages/numpy/core/__init__.py in <module>()
     51 from . import shape_base
     52 from .shape_base import *
---> 53 from . import einsumfunc
     54 from .einsumfunc import *
     55 del nt

ImportError: cannot import name 'einsumfunc'

Я думал, что был защищен путем клонирования отдельной среды и только изменения этой среды, однако кажется, что установка в одной среде изменила поведение в другой среде. Именно то, что я думал, что я избегал! Что пошло не так и как я могу это исправить? Кажется, что новая среда пока работает нормально.

Я проверил даты файла в обеих средах. carnd-term1-gpu среда имела файлы, которые были датированы в тот же день, когда я сделал обновление в tflow среда. Есть идеи, как это могло произойти?

Я попытался добавить отсутствующий файл einsumfunc.py к моему carnd-term1-gpu среда и снова запустил Ipython. На этот раз, когда я сделал import numpy as np другой файл не может быть импортирован. Так выглядит мой carnd-term1-gpu среда повреждена.

Сравнение conda list для каждой среды и глядя только на numpyЯ вижу следующее: Для tflow среда:

numpy                     1.11.3                    <pip>
numpy                     1.12.1                    <pip>
numpy                     1.11.3          py35_blas_openblas_200  [blas_openblas]  conda-forge

И для carnd-term1-gpu среда:

numpy                     1.11.3                    <pip>
numpy                     1.11.3          py35_blas_openblas_200  [blas_openblas]  conda-forge

Затем я посмотрел на изменения, используя conda list --revisions, Обе среды показывают только одну версию rev 0, Точно так же, глядя на conda-meta/history показывает только оригинальные даты создания 13 января для carnd-term1-gpu и 9 мая для tflow, Итак, сочетание этой версии пипа:

pip                       9.0.1                    py35_0    conda-forge

в сочетании с этим колесом:

https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp35-cp35m-linux_x86_64.whl

как-то испортил окружающую среду carnd-term1-gpu, Это похоже на ошибку или я как-то получил поврежденное колесо с сайта tenorflow? Если это позже, как это может повредить среду, отличную от установленной? Обратите внимание, что версия pip была одинаковой в обеих средах.

Я сделал следующее, чтобы выяснить, какие файлы изменились на дату установки.

find /home/ai/miniconda3/envs/carnd-term1-gpu/  -type f -newermt 2017-05-09 -ls | wc -l

Это показало 669 файлов были созданы / изменены. Большинство из них были в /site-packages/numpy/, но six.py, pyparsing.py,/setuptools/,/pkg_resources/,easy_install.py,/werkzeug/ были также затронуты.

conda --version 4.2.12

Я попробовал следующее, чтобы моя старая среда снова заработала.

conda env export > environment.yml
conda env create -f environment.yml -n sdc-gpu

Это привело к следующим ошибкам:

Could not import setuptools which is required to install from a source distribution.
Traceback (most recent call last):
  File "/home/ai/miniconda3/envs/sdc-gpu/lib/python3.5/site-packages/pip/req/req_install.py", line 387, in setup_py
    import setuptools  # noqa
  File "/home/ai/miniconda3/envs/sdc-gpu/lib/python3.5/site-packages/setuptools/__init__.py", line 12, in <module>
    import setuptools.version
  File "/home/ai/miniconda3/envs/sdc-gpu/lib/python3.5/site-packages/setuptools/version.py", line 1, in <module>
    import pkg_resources
  File "/home/ai/miniconda3/envs/sdc-gpu/lib/python3.5/site-packages/pkg_resources/__init__.py", line 70, in <module>
    import packaging.version
ImportError: No module named 'packaging'

CondaValueError: Value error: pip returned an error.

1 ответ

Решение

Я только что получил следующее из континуума; "Чтобы этого не случилось, вам придется использовать --copy флаг с вашей операцией клонирования. Ядром дизайна Конды является широкое использование жестких ссылок. Точная проблема - одна из самых больших ошибок ".

Поэтому, если бы я сделал следующее при первом клонировании среды, я бы мог избежать повреждения старой:

conda create --name tflow --copy --clone carnd-term1-gpu

Опция --copy Install all packages using copies instead of hard- or soft-link‐ing не позволит pip перезаписывать файлы.

Некоторая постоянная дискуссия об этом и о том, как это может быть решено в будущем, здесь: conda pip breaks

Единственный вариант восстановления - переустановить каждый поврежденный пакет. Остерегайтесь при использовании pip с conda...

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