Python Anaconda不使用激活环境中的包

Python Anaconda不使用激活环境中的包,python,python-3.x,anaconda,conda,Python,Python 3.x,Anaconda,Conda,我有一个conda环境,在bash终端中,有一个英特尔Python分发解释器。但是,在导入包时,它们是从系统默认Python的用户目录导入的,而不是从环境导入的。查看版本差异和熊猫包的规格来源 ~  $  conda activate idp ~  $  which python ~/anaconda3/envs/idp/bin/python ~  $  python Python 3.6.8 |Intel Corporation| (default, Mar 1 2019,

我有一个
conda
环境,在bash终端中,有一个英特尔Python分发解释器。但是,在导入包时,它们是从系统默认Python的用户目录导入的,而不是从环境导入的。查看版本差异和
熊猫
包的
规格
来源

 ~  $  conda activate idp
 ~  $  which python
~/anaconda3/envs/idp/bin/python
 ~  $  python
Python 3.6.8 |Intel Corporation| (default, Mar  1 2019, 00:10:45) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
Intel(R) Distribution for Python is brought to you by Intel Corporation.
Please check out: https://software.intel.com/en-us/python-distribution
>>> import pandas
>>> pandas.__version__
'0.22.0'
>>> pandas.__spec__
ModuleSpec(name='pandas', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f509e184ba8>, origin='/home/torstein/.local/lib/python3.6/site-packages/pandas/__init__.py', submodule_search_locations=['/home/torstein/.local/lib/python3.6/site-packages/pandas'])
>>> 
 ~  $  conda list | head -n 3
# packages in environment at /home/torstein/anaconda3/envs/idp:
#
# Name                    Version                   Build  Channel
 ~  $  conda list | grep pandas
pandas                    0.24.1                   py36_3    intel
 ~  $  conda env list
# conda environments:
#
base                     /home/torstein/anaconda3
idp                   *  /home/torstein/anaconda3/envs/idp
py36                     /home/torstein/anaconda3/envs/py36
.bashrc
的相关部分(路径中未明确设置蟒蛇):

这将分别为
base
idp
环境生成这些
$PATH
s:

 ~  $  echo $PATH
/home/torstein/anaconda3/bin:/home/torstein/anaconda3/condabin:/home/torstein/.cargo/bin:/home/torstein/.cargo/bin:/home/torstein/anaconda3/bin:/home/torstein/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/torstein/.local/bin:/home/torstein/bin
 ~  $  conda activate idp
 ~  $  echo $PATH
/home/torstein/anaconda3/envs/idp/bin:/home/torstein/anaconda3/condabin:/home/torstein/.cargo/bin:/home/torstein/.cargo/bin:/home/torstein/anaconda3/bin:/home/torstein/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/torstein/.local/bin:/home/torstein/bin
我确实要导入的
pandas
位于此处,它应该位于:


/home/torstein/anaconda3/envs/idp/lib/python3.6/site packages/pandas
解决方案是:在anaconda\env\xyz(以及其他实现中)中,将path环境变量设置为安装“python.exe”的目录

默认情况下,anaconda中的python.exe文件位于:

c:\.....\anaconda\env\xyz
很明显,在我的例子中,在您这样做之后,python命令会产生以下结果

python
Python 3.4.3 |Anaconda 2.2.0. (64|bit)|(default, Nov 7 2015), etc, etc
诊断 在
路径
中似乎有(或曾经有)另一个Python 3.6,我怀疑Conda依赖项解析器最终以某种方式将一些包解析为这个可选的
站点包
,并无意中将此目录包含在
sys.PATH
中。这似乎是错误的

证据 我认为这是因为从这里加载
pandas
模块:

/home/torstein/.local/lib/python3.6/site-packages/pandas

如果你签入Python

import sys

sys.path
我希望这应该显示上面的目录

因为据报道,
PYTHONPATH
是空的(应该是这样的!),所以它不能对这个错误加载负责,因此我认为是Conda以某种方式配置了env

此外,Python3.7env不受影响的原因可能是您无法跨不同的次要版本加载模块

即时解决方案 无论如何,你需要摆脱这种依赖。有一些事情可以尝试

  • 路径中删除
    /home/torstein/.local/
    。但这可能会导致其他问题。大概您在
    PATH
    中有它,因为您在那里有其他非开发的东西
  • 专门转储
    站点包
    目录。在评论中,有人指出,这是不再使用的全局Python安装的剩余部分,因此,将其删除似乎是一件好事。不过,请备份它,以防它有其他依赖项
  • 导入模块之前,请从
    sys.path
    中清除此路径。不确定是否有一种干净的方法可以做到这一点
  • 就我个人而言,我想删除它并创建新的环境。可能很难知道您与这个目录的关联程度,因此我会谨慎地假设其他软件包对其中的内容没有隐藏的依赖关系

    长期解决办法 建议的解决方法是添加以下环境变量

    export PYTHONNOUSERSITE=True
    

    这将阻止Conda加载其他本地
    站点包
    目录。有了它,您一开始就不应该遇到这个问题。

    正如您在文章中看到的,Python解释器是正确的解释器。这与推荐的做法相反。自Conda v.4.4以来,不应手动操作
    路径
    。@merv:我应该排除哪些路径?我真的需要从头开始创建整个conda环境吗?还是说手动设置路径,然后再次尝试导入
    /home/torstein/.local/lib/python3.6/
    未明确包含在
    $PATH
    中。顺便问一下,为py36环境安装的与anaconda的
    pip
    一起的软件包最终会出现在
    /home/torstein/.local/lib/python3.6/站点软件包中吗?因为没有系统范围的Python3.6安装(但曾经有过),我假设另一个Python3.6来自基于站点包的
    /home/torstein/.local/bin
    。我会重新创建整个过程——大部分包都应该缓存,所以不会花太长时间。然而,如果你愿意,你可以不带它去尝试;不过,我希望依赖项解析程序已经在idp env中设置了指向错误的
    站点包的内容。没有系统范围的python 3.6安装哦,那么您可能应该删除
    /home/torstein/.local/lib/python3.6/site packages/
    目录(尽管只是以防万一,还是先备份它)。否,
    pip
    在Conda环境中仍应保持在环境中。您是否设置了
    PYTHONPATH
    (不在激活的环境中)?@merv:
    PYTHONPATH
    未在
    base
    idp
    中设置。我不知道它是否是在康达在终端启动时运行自动
    路径
    操作之前设置的。删除(或重命名)
    /.local/lib/python3.6/site-packages/
    成功了。没有必要创建新的环境。谢谢
    import sys
    
    sys.path
    
    export PYTHONNOUSERSITE=True