我刚刚克隆了一个工作的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.py
,pyparsing.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
答案 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的点子时要小心...