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