在克隆的conda环境中安装tensorflow会破坏从

时间:2017-05-09 20:18:09

标签: python numpy tensorflow pip miniconda

我刚刚克隆了一个工作的miniconda环境carnd-term1-gpu,它与使用tensorflow版本' 0.12.1'的gpu工作有张量流。环境中安装了许多其他python包。我想升级到tensorflow的最新版本,所以我基于tensorflow Ubuntu执行了以下操作:

1)将现有的工作环境克隆为tflow

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

这已成功完成。

2)source activate 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仅显示{1}}的1月13日和carnd-term1-gpu的5月9日的原始创建日期。所以这个版本的pip的组合:

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 。这似乎是一个错误或我从张量流网站得到一个损坏的轮子?如果是后者,它怎么会破坏不同于安装的环境? 注意版本的pip在两种环境中都是相同的。

我执行了以下操作来调查在安装日期更改了哪些文件。

carnd-term1-gpu

这表明创建/修改了669个文件。其中大多数都位于find /home/ai/miniconda3/envs/carnd-term1-gpu/ -type f -newermt 2017-05-09 -ls | wc -l ,但/site-packages/numpy/six.pypyparsing.py/setuptools//pkg_resources/easy_install.py也受到影响。

/werkzeug/是4.2.12

我尝试了以下方法让我的旧环境重新开始。

conda --version

这导致以下错误:

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

1 个答案:

答案 0 :(得分:1)

我刚从continuum得到以下内容; &#34;为防止这种情况发生,您必须在克隆操作中使用--copy标志。康达设计的核心是大量使用硬链接。这个确切的问题是最大的陷阱之一。&#34;

因此,如果我在第一次克隆环境时做了以下操作,我本可以避免破坏旧的环境:

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

我恢复的唯一选择是重新安装每个损坏的包。当使用带有conda的点子时要小心...