2025, Nov 01 05:47

Почему geopy не импортируется в Anaconda и как это исправить

Почему geopy не импортируется на Ubuntu при Anaconda: запускается системный python3, а не интерпретатор conda. Как выбрать правильный Python и исправить ошибку.

Когда пакет вроде geopy установлен через Anaconda на Ubuntu, но Python не может его импортировать, причина обычно не в самой библиотеке. Важен выбор интерпретатора: какой Python вы на самом деле запускаете. Если использовать системный интерпретатор вместо того, что входит в активное окружение conda, импорт не найдёт только что установленные пакеты.

Как это проявляется

Пакет действительно присутствует в окружении conda:

(base) igor@XPS-13:~$ conda list | grep geopy
geopy                     2.4.1              pyhd8ed1ab_2    conda-forge

Его можно обнаружить и в каталогах Anaconda:

(base) igor@XPS-13:~$ find -type d -name "*geopy*"
./anaconda3/pkgs/geopy-2.4.1-pyhd8ed1ab_2
./anaconda3/pkgs/geopy-2.4.1-pyhd8ed1ab_2/site-packages/geopy-2.4.1.dist-info
./anaconda3/pkgs/geopy-2.4.1-pyhd8ed1ab_2/site-packages/geopy
./anaconda3/lib/python3.12/site-packages/geopy-2.4.1.dist-info
./anaconda3/lib/python3.12/site-packages/geopy

Но в интерактивной сессии, запущенной системной командой, импорт завершается ошибкой:

(base) igor@XPS-13:~$ python3
Python 3.12.3 (main, Jun 18 2025, 17:59:45) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import geopy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'geopy'

Если посмотреть путь поиска модулей, становится ясно, что каталоги Anaconda не участвуют:

>>> import sys as sy
>>> print(sy.path)
['', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/usr/local/lib/python3.12/dist-packages', '/usr/lib/python3/dist-packages']

Что происходит

Вы запускаете системный Python, а не Python из Anaconda.

Даже если индикатор окружения conda показывает (base), команда python3 запускает системный интерпретатор. Системный интерпретатор не знает о пакетах, установленных в вашем окружении conda, поэтому geopy и не находится. Это подтверждает выведенный вами sys.path: в нём только системные каталоги, ничего из anaconda3.

Решение

Когда окружение conda активно (видно как (base)), используйте команду python вместо python3.

Команда python указывает на интерпретатор из активного окружения conda. Этот интерпретатор видит каталог site-packages, куда установлен geopy.

(base) igor@XPS-13:~$ python
Python 3.12.x | packaged by conda-forge | on linux
>>> import geopy
>>> # отсутствие ошибки означает, что импорт прошёл успешно

Если хотите убедиться в путях поиска под интерпретатором из conda, проверьте их тем же способом, сохранив логику с переименованным алиасом:

>>> import sys as sy
>>> print(sy.path)
# здесь вы увидите пути, связанные с anaconda3, если используется python из conda

Почему это важно

На машине с несколькими интерпретаторами Python выбор интерпретатора определяет, с каким окружением и наборами пакетов вы работаете. Смешивание системного python3 с пакетами, установленными в Anaconda, приводит к запутанным ошибкам импорта, хотя пакет очевидно лежит на диске. Запуск исполняемого файла python из активного окружения conda согласует интерпретатор и пакеты, делая инструменты предсказуемыми, а импорты — стабильными.

Вывод

Если conda активна, начинайте сессии с python, а не python3. Один этот шаг гарантирует, что код выполняется под интерпретатором, в котором действительно есть установленные через conda библиотеки вроде geopy, — и избавит от лишних сюрпризов с ModuleNotFoundError.

Статья основана на вопросе с StackOverflow от IgorLopez и ответе Shivam Bhosle.