Информация о версии Conda на упаковке не соответствует __version__

Я использую анаконду

(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

Но если я сделаю, dill кажется, имеет более старую версию:

(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'

Похоже, что в моем пути включения, .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файлы между разными компьютерами. Я начал получать ModuleNotFoundError: No module named 'dill._dill' ошибка при чтении файлов на моем локальном компьютере. Я подозреваю, что это потому, что эти файлы укомплектованы более новой версией, и мой локальный компьютер пытается прочитать их со старой. Чтобы проверить это, я хотел бы обновить dill на моем локальном компьютере (или заставьте среду работать в той версии, в которой она на самом деле заявляет).

1 ответ

Спасибо за комментарий @Sraw для указателя. Чтобы проверить, какой файл действительно читается, выполните

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

Причину этого можно найти в пути включения:

>>> 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']

Этот конкретный путь соответствует pip, Предполагается не устанавливать пакеты, которые уже установлены с conda, но, видимо, здесь ошиблись. Также мне непонятно, почему pip папка доминирует над conda Папка в порядке, но это то, что есть.

pip list

проверил, что на нем установлена ​​более старая версия, и

pip uninstall dill

удалил эту старую версию.

Другие вопросы по тегам