Python Anaconda:无法解释通过conda pip安装的软件包的行为

Python Anaconda:无法解释通过conda pip安装的软件包的行为,python,pip,anaconda,conda,Python,Pip,Anaconda,Conda,我正在尝试导出使用conda+pip(通过conda安装)构建的conda env,但是我缺少一些通过pip安装的软件包。下面是我遵循的流程的详细信息 我运行的操作系统是: bdauser@testsuselinux:~> cat /etc/os-release NAME="SLES" VERSION="12-SP3" VERSION_ID="12.3" PRETTY_NAME="SUSE Linux Enterprise Server 12 SP3" ID="sles" ANSI_COL

我正在尝试导出使用conda+pip(通过conda安装)构建的conda env,但是我缺少一些通过pip安装的软件包。下面是我遵循的流程的详细信息

我运行的操作系统是:

bdauser@testsuselinux:~> cat /etc/os-release
NAME="SLES"
VERSION="12-SP3"
VERSION_ID="12.3"
PRETTY_NAME="SUSE Linux Enterprise Server 12 SP3"
ID="sles"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:suse:sles:12:sp3"
这是我的巨蟒版本:

bdauser@testsuselinux:~> conda list anaconda
# packages in environment at /home/bdauser/anaconda3:
#
anaconda                  5.0.1            py36hd30a520_1
anaconda-client           1.6.5            py36h19c0dcd_0
anaconda-navigator        1.6.9            py36h11ddaaa_0
anaconda-project          0.8.0            py36h29abdf5_0
我通过以下方式创建并激活了anaconda env:

bdauser@testsuselinux:~> conda create --name libmad python=3.5
bdauser@testsuselinux:~> source activate libmad
(libmad) bdauser@testsuselinux:~/anaconda3/envs/libmad/bin> /home/bdauser/anaconda3/envs/libmad/bin/pip install nltk==3.4
Requirement already satisfied: nltk==3.4 in /home/bdauser/anaconda3/envs/libmad/lib/python3.5/site-packages (3.4)
Requirement already satisfied: six in /home/bdauser/anaconda3/envs/libmad/lib/python3.5/site-packages (from nltk==3.4) (1.12.0)
Requirement already satisfied: singledispatch in /home/bdauser/anaconda3/envs/libmad/lib/python3.5/site-packages (from nltk==3.4) (3.4.0.3)
然后,我通过以下方式为康达安装了pip:

(libmad) bdauser@testsuselinux:~> conda install pip
然后,我使用pip for conda成功安装了一个软件包:

(libmad) bdauser@testsuselinux:~> /home/bdauser/anaconda3/envs/libmad/bin/pip install nltk==3.4
我已经检查了软件包是否通过以下方式安装:

bdauser@testsuselinux:~> conda create --name libmad python=3.5
bdauser@testsuselinux:~> source activate libmad
(libmad) bdauser@testsuselinux:~/anaconda3/envs/libmad/bin> /home/bdauser/anaconda3/envs/libmad/bin/pip install nltk==3.4
Requirement already satisfied: nltk==3.4 in /home/bdauser/anaconda3/envs/libmad/lib/python3.5/site-packages (3.4)
Requirement already satisfied: six in /home/bdauser/anaconda3/envs/libmad/lib/python3.5/site-packages (from nltk==3.4) (1.12.0)
Requirement already satisfied: singledispatch in /home/bdauser/anaconda3/envs/libmad/lib/python3.5/site-packages (from nltk==3.4) (3.4.0.3)
此时,我已尝试导出conda env:

(libmad) bdauser@testsuselinux:~/anaconda3/envs/libmad/bin> conda env export
name: libmad
channels:
- defaults
dependencies:
- ca-certificates=2019.1.23=0
- certifi=2018.8.24=py35_1
- libedit=3.1.20181209=hc058e9b_0
- libffi=3.2.1=hd88cf55_4
- libgcc-ng=8.2.0=hdf63c60_1
- libstdcxx-ng=8.2.0=hdf63c60_1
- ncurses=6.1=he6710b0_1
- openssl=1.0.2r=h7b6447c_0
- pip=10.0.1=py35_0
- python=3.5.6=hc3d631a_0
- readline=7.0=h7b6447c_5
- setuptools=40.2.0=py35_0
- sqlite=3.28.0=h7b6447c_0
- tk=8.6.8=hbc83047_0
- wheel=0.31.1=py35_0
- xz=5.2.4=h14c3975_4
- zlib=1.2.11=h7b6447c_3
prefix: /home/bdauser/anaconda3/envs/libmad
但nltk并不像您所看到的那样出现

我尝试运行一个简单的
conda list
,我可以看到nltk包:

(libmad) bdauser@testsuselinux:~/anaconda3/envs/libmad/bin> conda list
# packages in environment at /home/bdauser/anaconda3/envs/libmad:
#
ca-certificates           2019.1.23                     0
certifi                   2018.8.24                py35_1
libedit                   3.1.20181209         hc058e9b_0
libffi                    3.2.1                hd88cf55_4
libgcc-ng                 8.2.0                hdf63c60_1
libstdcxx-ng              8.2.0                hdf63c60_1
ncurses                   6.1                  he6710b0_1
nltk                      3.4                       <pip>
openssl                   1.0.2r               h7b6447c_0
pip                       10.0.1                   py35_0
pip                       19.1.1                    <pip>
python                    3.5.6                hc3d631a_0
readline                  7.0                  h7b6447c_5
setuptools                41.0.1                    <pip>
setuptools                40.2.0                   py35_0
singledispatch            3.4.0.3                   <pip>
six                       1.12.0                    <pip>
sqlite                    3.28.0               h7b6447c_0
tk                        8.6.8                hbc83047_0
wheel                     0.31.1                   py35_0
xz                        5.2.4                h14c3975_4
zlib                      1.2.11               h7b6447c_3
(libmad)bdauser@testsuselinux:~/anaconda3/envs/libmad/bin>conda列表
#在/home/bdauser/anaconda3/envs/libmad环境中的包:
#
ca证书2019.1.23 0
certifi 2018.8.24 py35_1
libedit 3.1.20181209 hc058e9b_0
libffi 3.2.1 hd88cf55_4
libgcc ng 8.2.0 hdf63c60_1
libstdcxx ng 8.2.0 hdf63c60_1
课程6.1 he6710b0_1
nltk 3.4
openssl 1.0.2r h7b6447c_0
pip 10.0.1 py35_0
pip 19.1.1
python 3.5.6 hc3d631a_0
readline 7.0 h7b6447c_5
设置工具41.0.1
setuptools 40.2.0 py35_0
singledispatch 3.4.0.3
六个1.12.0
sqlite 3.28.0 h7b6447c_0
tk 8.6.8 hbc83047_0
车轮0.31.1 py35_0
xz 5.2.4 h14c3975_4
zlib 1.2.11 h7b6447c_3
如果使用export标志运行相同的命令,则不会再次看到nltk:

(libmad) bdauser@testsuselinux:~/anaconda3/envs/libmad/bin> conda list --export
# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: linux-64
ca-certificates=2019.1.23=0
certifi=2018.8.24=py35_1
libedit=3.1.20181209=hc058e9b_0
libffi=3.2.1=hd88cf55_4
libgcc-ng=8.2.0=hdf63c60_1
libstdcxx-ng=8.2.0=hdf63c60_1
ncurses=6.1=he6710b0_1
openssl=1.0.2r=h7b6447c_0
pip=10.0.1=py35_0
python=3.5.6=hc3d631a_0
readline=7.0=h7b6447c_5
setuptools=40.2.0=py35_0
sqlite=3.28.0=h7b6447c_0
tk=8.6.8=hbc83047_0
wheel=0.31.1=py35_0
xz=5.2.4=h14c3975_4
zlib=1.2.11=h7b6447c_3
(libmad)bdauser@testsuselinux:~/anaconda3/envs/libmad/bin>conda列表--导出
#此文件可用于创建环境,使用:
#$conda create--name--file
#平台:linux-64
ca证书=2019.1.23=0
certifi=2018.8.24=py35_1
libedit=3.1.20181209=hc058e9b_0
libffi=3.2.1=hd88cf55_4
libgcc ng=8.2.0=hdf63c60_1
libstdcxx ng=8.2.0=hdf63c60_1
ncurses=6.1=he6710b0_1
openssl=1.0.2r=h7b6447c_0
pip=10.0.1=py35_0
python=3.5.6=hc3d631a_0
读线=7.0=h7b6447c_5
setuptools=40.2.0=py35_0
sqlite=3.28.0=h7b6447c_0
tk=8.6.8=hbc83047_0
车轮=0.31.1=py35_0
xz=5.2.4=h14c3975_4
zlib=1.2.11=h7b6447c_3
有人能解释这种行为吗?我做错了什么?目标是将conda env导出到另一台机器,并通过pip安装所有包

提前感谢,,
Alessio

我怀疑问题在于您通过PyPI更新了
pip
,然后用它来安装软件包。我认为Conda在识别未通过Conda安装的pip安装的软件包时存在问题。相反,请尝试仅使用通过Conda安装的
pip

conda create -n libmad python=3.5 pip
conda activate libmad
pip install nltk==3.4
提示:如果您处于激活环境中,则不必提供指向
pip
的完整路径

从技术上讲,我们不应该在创建步骤中包含
pip
,因为每当安装
python
时,Conda总是安装
pip
;我们将把它留在这里,以备不时之需。还请注意,您可以通过Conda Forge频道获得较新版本的
pip
(对于Python 3.5,最高版本为18.0)

然后,
conda env export
给出:

name: libmad
channels:
  - defaults
dependencies:
  - ca-certificates=2019.1.23=0
  - certifi=2018.8.24=py35_1
  - libcxx=4.0.1=hcfea43d_1
  - libcxxabi=4.0.1=hcfea43d_1
  - libedit=3.1.20181209=hb402a30_0
  - libffi=3.2.1=1
  - ncurses=6.1=h0a44026_1
  - openssl=1.0.2r=h1de35cc_0
  - pip=10.0.1=py35_0
  - python=3.5.6=hc167b69_0
  - readline=7.0=h1de35cc_5
  - setuptools=40.2.0=py35_0
  - sqlite=3.28.0=ha441bb4_0
  - tk=8.6.8=ha441bb4_0
  - wheel=0.31.1=py35_0
  - xz=5.2.4=h1de35cc_4
  - zlib=1.2.11=h1de35cc_3
  - pip:
    - nltk==3.4
    - singledispatch==3.4.0.3
    - six==1.12.0

我想你遗漏了一件至关重要的事情:你是如何得到
pip=19.1.1
的?在Anaconda云上没有Python3.5版本的构建。我怀疑您需要坚持通过Conda安装的
pip
,才能识别通过PyPI进行的安装。谢谢@merv,所以我在发布的第四段代码(Conda install pip)中运行的命令有点错误?如果我尝试使用Conda forge::pip创建env,我会收到一个PackageNotFoundError。相反,如果我在没有它的情况下创建env,并且没有通过conda install pip安装pip,那么我可以在conda env中看到nltk。谢谢@merv@AlessioG好的,我调整了它以删除Conda Forge部件-我只在那里有它,因为你可以从那里获得更新版本的
pip
,但这不是必需的。更清楚地说,您报告的命令没有一个是错误的。然而,不知何故,您的env中有两个版本的
pip
,其中一个版本不兼容。