python – 包的Conda版本信息与__version__不对应

我正在使用anaconda

(myenv3) foo@foo:~$which conda
/home/foo/anaconda3/bin/conda

在“myenv3”中我安装了dill = 2.8.2:

(myenv3) foo@foo:~$conda list -n myenv3 dill
# packages in environment at /home/foo/anaconda3/envs/myenv3:
#
# Name                    Version                   Build  Channel
dill                      0.2.8.2                  py36_0    conda-forge

如果我运行python,我会得到完全相同的环境:

(myenv3) foo@foo:~$which python
/home/foo/anaconda3/envs/myenv3/bin/python

但如果我这样做,莳萝似乎有一个旧版本:

(myenv3) foo@foo:~$python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill
>>> dill.__version__
'0.2.7.1'

显然,该文件来自其他地方:

>>> dill.__file__
'/home/foo/.local/lib/python3.6/site-packages/dill/__init__.py'

看来在我的include路径中,.local支配conda特定的文件夹:

>>> import sys
>>> sys.path
['', '/home/foo/anaconda3/envs/myenv3/lib/python36.zip', '/home/foo/anaconda3/envs/myenv3/lib/python3.6', '/home/foo/anaconda3/envs/myenv3/lib/python3.6/lib-dynload', '/home/foo/.local/lib/python3.6/site-packages', '/home/foo/anaconda3/envs/myenv3/lib/python3.6/site-packages']

为什么 – 我该如何解决这个问题?

上下文:我在不同的计算机之间共享dill-ed文件.我开始得到一个ModuleNotFoundError:在我本地计算机上读取文件时没有名为’dill._dill’的模块.我怀疑这是因为这些文件是用较新版本填充的,而我的本地计算机正试图用较旧的版本读取它们.为了测试这一点,我想在我的本地计算机上升级dill(或者让环境运行它实际声称的版本).

最佳答案 感谢@ Sraw对指针的评论.要检查实际读取的文件,请执行

>>> dill.__file__
'/home/foo/.local/lib/python3.6/site-packages/dill/__init__.py'

原因可以在include路径中找到:

>>> import sys
>>> sys.path
['', '/home/foo/anaconda3/envs/myenv3/lib/python36.zip', '/home/foo/anaconda3/envs/myenv3/lib/python3.6', '/home/foo/anaconda3/envs/myenv3/lib/python3.6/lib-dynload', '/home/foo/.local/lib/python3.6/site-packages', '/home/foo/anaconda3/envs/myenv3/lib/python3.6/site-packages']

该特定路径对应于点.它应该不安装已经安装了conda的软件包,但显然它在这里犯了一个错误.另外我不清楚为什么pip文件夹在排序中占据了conda文件夹,但它就是这样.

pip list

验证它已安装旧版本,并且

pip uninstall dill

删除那个旧版本.

点赞