首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在克隆的conda环境中安装tensorflow会破坏conda环境

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

Stack Overflow用户
提问于 2017-05-09 20:18:09
回答 1查看 1.8K关注 0票数 3

我刚刚克隆了一个使用tensorflow版本'0.12.1‘与gpu一起工作的小型工作环境carnd-term1-gpu。环境中安装了许多其他python包。我想升级到tensorflow的最新版本,所以我做了以下基于tensorflow Ubuntu的工作

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

代码语言:javascript
复制
conda create --name tflow --clone carnd-term1-gpu

成功地完成了这项工作。

2)源激活tflow并使用pip进行安装。

代码语言:javascript
复制
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

现在,我尝试运行旧环境,假设它不应该被更改。

代码语言:javascript
复制
source activate carnd-term1-gpu
ipython

然后从ipython提示符中键入import numpy as np并获得以下信息:

代码语言:javascript
复制
---------------------------------------------------------------------------
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环境:

代码语言:javascript
复制
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环境:

代码语言:javascript
复制
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只显示了carnd-term1-gpu 1月13日和tflow 5月9日的原始创建日期。所以这个版本的pip的组合:

代码语言:javascript
复制
pip                       9.0.1                    py35_0    conda-forge

与这个轮子结合在一起:

代码语言:javascript
复制
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp35-cp35m-linux_x86_64.whl

以某种方式破坏了环境carnd-term1-gpu。这看起来要么是一个bug,要么是我从tensorflow网站上得到了一个损坏的轮子?如果是后者,它怎么会破坏一个不同于安装的环境呢?在这两种环境中,pip的注释版本是相同的。

我做了以下工作,以调查在安装日期更改了哪些文件。

代码语言:javascript
复制
find /home/ai/miniconda3/envs/carnd-term1-gpu/  -type f -newermt 2017-05-09 -ls | wc -l

这显示创建/修改了669个文件。其中大部分发生在/site-packages/numpy/,但six.pypyparsing.py/setuptools//pkg_resources/easy_install.py/werkzeug/也受到影响。

conda --version为4.2.12

为了让我的旧环境再一次运行,我尝试了下面的方法。

代码语言:javascript
复制
conda env export > environment.yml
conda env create -f environment.yml -n sdc-gpu

这导致以下错误:

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-11 18:48:44

我刚刚从连续体获得了以下信息:“为了防止这种情况发生,您必须在克隆操作中使用--copy标志。conda设计的核心是广泛使用硬链接。这个问题是最大的缺陷之一。”

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

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断裂

我恢复的唯一选择是重新安装每个损坏的包。在使用pip和conda时要小心.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43879119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档