【发布时间】:2019-03-10 15:38:22
【问题描述】:
我有一个conda 环境,在一个 bash 终端中,带有一个 Intel Python Distribution 解释器。但是,在导入包时,它们是从系统默认 Python 的用户目录中导入的,而不是从环境中导入的。查看pandas 包的版本差异和__spec__ 来源。
~ $ 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
使用base 环境时,不会发生这种情况;从正确的路径导入包(例如pandas):
~ $ conda deactivate
~ $ conda env list
# conda environments:
#
base * /home/torstein/anaconda3
idp /home/torstein/anaconda3/envs/idp
py36 /home/torstein/anaconda3/envs/py36
~ $ which python
~/anaconda3/bin/python
~ $ python
Python 3.7.0 (default, Oct 9 2018, 10:31:47)
[GCC 7.3.0] :: Anaconda custom (64-bit) on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
pan>>> pandas.__version__
'0.23.4'
>>> pandas.__spec__
ModuleSpec(name='pandas', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fad808a8e80>, origin='/home/torstein/anaconda3/lib/python3.7/site-packages/pandas/__init__.py', submodule_search_locations=['/home/torstein/anaconda3/lib/python3.7/site-packages/pandas'])
.bashrc的相关部分(路径中没有显式设置anaconda):
export PATH="/home/torstein/.cargo/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/lib/intel64_lin:/opt/intel/compilers_and_libraries_2018.0.128/linux/mkl/lib/intel64_lin/"
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/torstein/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/torstein/anaconda3/etc/profile.d/conda.sh" ]; then
. "/home/torstein/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/home/torstein/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
分别为 base 和 idp 环境生成这些 $PATHs:
~ $ 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
【问题讨论】:
-
@merv:我应该排除哪些路径?我真的需要从头开始创建整个 conda 环境,还是您的意思是手动设置路径然后再次尝试导入?
/home/torstein/.local/lib/python3.6/未明确包含在$PATH中。 -
顺便说一下,在 py36 环境下使用 anaconda 的
pip安装的软件包最终会出现在/home/torstein/.local/lib/python3.6/site-packages/中吗?因为没有系统范围的python 3.6安装(但从前有)。 -
我假设其他 Python 3.6 来自
/home/torstein/.local/bin,基于站点包。我会重新创建整个东西 - 大多数包都应该被缓存,所以它不应该花很长时间。但是,如果您愿意,也可以不试一试;不过,我希望依赖解析器已经在 idp 环境中设置了指向错误site-packages的内容。 -
没有系统范围的 python 3.6 安装 哦,那你应该删除那个
/home/torstein/.local/lib/python3.6/site-packages/目录(虽然以防万一,先备份它)。不,Conda 环境中的pip仍应保留在环境中。你有PYTHONPATH设置(当不在激活的环境中时)? -
@merv:
PYTHONPATH未在base或idp中设置。我不知道它是否设置为 before conda 在终端启动时运行自动PATH操作。删除(或重命名)/.local/lib/python3.6/site-packages/成功了。没有必要创建一个新的环境。谢谢!
标签: python python-3.x anaconda conda