【问题标题】:pip packages not included in "conda env export"“conda env export”中不包含 pip 包
【发布时间】:2018-10-19 13:42:29
【问题描述】:

我的 python 项目在 conda 虚拟环境中运行。只要该软件包可用于以这种方式安装,我就使用conda install 在环境中安装软件包,否则,我使用pip install 安装它。

为了让其他开发人员更容易安装项目,我将在 conda 环境中使用的包列表导出到一个文件:conda env export > conda_environment_export.yml

但是,有一段时间以来,包导出不再包含 pip 安装的包。

如何使 pip 包再次出现在导出中?

我几周前的 conda 导出文件:

name: sensor_gateway
channels:
  - defaults
dependencies:
  - aiohttp=2.3.9=py36_0
  - async-timeout=2.0.0=py36hc3e01a3_0
  - certifi=2018.1.18=py36_0
  - chardet=3.0.4=py36h420ce6e_1
  - jinja2=2.10=py36h292fed1_0
  - markupsafe=1.0=py36h0e26971_1
  - multidict=3.3.2=py36h72bac45_0
  - pip=9.0.1=py36h226ae91_4
  - pymysql=0.7.11=py36hf59f3ba_0
  - python=3.6.4=h6538335_1
  - pytz=2018.3=py36_0
  - setuptools=38.4.0=py36_0
  - sqlalchemy=1.2.1=py36hfa6e2cd_0
  - vc=14=h0510ff6_3
  - vs2015_runtime=14.0.25123=3
  - wheel=0.30.0=py36h6c3ec14_1
  - wincertstore=0.2=py36h7fe50ca_0
  - yarl=0.14.2=py36h27d1bf2_0
  - pip:
    - aiohttp-jinja2==0.16.0
    - aiomysql==0.0.12
    - attrs==17.4.0
    - idna==2.6
    - idna-ssl==1.0.0
    - python-mimeparse==1.6.0
prefix: C:\ProgramData\Anaconda3\envs\sensor_gateway

conda 现在导出:

name: sensor_gateway
channels:
  - defaults
dependencies:
  - aiohttp=2.3.9=py36_0
  - async-timeout=2.0.0=py36hc3e01a3_0
  - certifi=2018.4.16=py36_0
  - chardet=3.0.4=py36h420ce6e_1
  - icc_rt=2017.0.4=h97af966_0
  - intel-openmp=2018.0.0=8
  - jinja2=2.10=py36h292fed1_0
  - markupsafe=1.0=py36h0e26971_1
  - mkl=2018.0.2=1
  - mkl_fft=1.0.1=py36h452e1ab_0
  - mkl_random=1.0.1=py36h9258bd6_0
  - multidict=3.3.2=py36h72bac45_0
  - numpy=1.14.2=py36h5c71026_1
  - pip=9.0.1=py36h226ae91_4
  - pymysql=0.7.11=py36hf59f3ba_0
  - python=3.6.4=h6538335_1
  - pytz=2018.3=py36_0
  - setuptools=38.4.0=py36_0
  - simplejson=3.14.0=py36hfa6e2cd_0
  - sqlalchemy=1.2.1=py36hfa6e2cd_0
  - vc=14=h0510ff6_3
  - vs2015_runtime=14.0.25123=3
  - wheel=0.30.0=py36h6c3ec14_1
  - wincertstore=0.2=py36h7fe50ca_0
  - yarl=0.14.2=py36h27d1bf2_0
prefix: C:\ProgramData\Anaconda3\envs\sensor_gateway

我怀疑更新 conda 的版本 (4.4.10-py36_0 --> 4.5.2-py36_0) 可能导致此项目出现此问题。在另一个项目中,我遇到了同样的问题,但我更新了 pip (9.0.1-py36h226ae91_4 --> 10.0.1-py36_0)。即使回到那里的 pip 9.0.1 之后,问题仍然存在。我的怀疑正确吗?我该怎么做才能再次解决这个问题?

更新:

目前唯一建议的答案链接到this question,它似乎没有解决我的问题:

1.在 Windows 命令终端上,以管理员身份打开:

where pip 输出(where 作为 Windows 等效命令到 unix/linux 上的which):

C:\ProgramData\Anaconda3\Scripts\pip.exe
C:\Users\Sander\AppData\Local\Programs\Python\Python36\Scripts\pip.exe

pip freeze 输出:

列出我曾经在“普通”python 上安装的所有包(= 默认情况下安装的所有包,不在任何专用虚拟环境中)。软件包列表太长,无法在此处列出。

2。在 Windows 命令终端上,以管理员权限打开,并在执行 activate sensor_gateway 后:

where pip 输出:

C:\ProgramData\Anaconda3\envs\sensor_gateway\Scripts\pip.exe
C:\ProgramData\Anaconda3\Scripts\pip.exe
C:\Users\Sander\AppData\Local\Programs\Python\Python36\Scripts\pip.exe

pip freeze 输出:

正确列出在我的环境中使用 pip 安装的所有软件包。

所以看来,当我的虚拟环境被激活时,那个环境中安装了一个 pip,并且它必须是 that pip 在被要求时返回已安装包的列表,而不是另一个 pip安装,因为环境上的pip包列表是正确的。

【问题讨论】:

  • 我想补充一点,我遇到了同样的问题,通过使用conda update -n base -c defaults conda 更新conda 解决了这个问题。
  • 只是想注意,如果您使用--from-history,则不会包含 pip 包。在这种情况下,有些人可能会找到这篇文章。您想要做的是关注正在讨论的这个 GitHub 问题:github.com/conda/conda/issues/9628

标签: pip anaconda conda


【解决方案1】:

对我来说,这只是使用 conda 包 pip 18.1_py36_0 出现的(没有尝试任何其他版本)。 所以我通过

将虚拟环境中的 pip 降级到版本 10
conda install pip=10

在此之后,导出再次列出 pip 包。

另请参阅 conda https://github.com/conda/conda/pull/7612 的此拉取请求,它修复了 conda 4.6.2 的问题。它也被向后移植到 conda 4.5.10。目前没有 conda 4.4.x backport。

【讨论】:

  • 我同样将我的 conda 环境降级为 pip=9.0.1 并解决了这个问题。
【解决方案2】:

在写这篇文章的时候,由于 anaconda 读取 pip 列表的问题,conda export 命令只导出通过conda install packagename 安装的包并忽略 pip 的。

您可以尝试通过conda install 重新安装您的软件包,看看它是否正确生成了 environment.yml 文件。

【讨论】:

    【解决方案3】:

    我可以通过在具有管理员权限的命令窗口中运行它来解决这个问题:

    activate <env-name>
    conda update pip
    

    之后,我的环境中可用包的导出再次包含使用 conda 安装的包和使用 pip 安装的包。

    我怀疑我可能导致了这个包导出问题,因为我在执行包安装时遵循了 pip 之前给出的指令:

    “您使用的是 pip 版本 9.0.3,但版本 10.0.1 可用。 您应该考虑通过 'python -m pip install --upgrade pip' > 命令进行升级。"

    所以用python -m pip install --upgrade pip 更新破坏了我的包导出,但conda update pip 修复了它。

    【讨论】:

      【解决方案4】:

      如果您已安装 pipanaconda 并使用它来安装软件包,那么 conda-env 会自动执行此操作。

      所以基本上你可以用

      导出你的环境

      conda env export -n &lt;env-name&gt; &gt; environment.yml

      否则

      请参考这个link

      【讨论】:

      • 抱歉,这不是解决方案。这就是我现在导出我的环境的方式,并且我已经安装了 conda 的 pip。我的 2 个环境中的 conda-env 导出确实早先自动包含了 pip 包,但现在不再包含。
      • 不过,您指向相关问题的链接很有趣。我在我的问题中添加了一些信息,说明为什么我认为我的问题与调用错误的 pip 安装无关,正如该相关问题中所建议的那样。
      猜你喜欢
      • 1970-01-01
      • 2020-12-27
      • 2017-07-05
      • 2016-05-03
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 2021-12-29
      相关资源
      最近更新 更多