Подтвердить что ты не робот

Невозможно импортировать модуль, который определенно установлен

После установки Mechanize я не могу его импортировать.

Я попытался установить из pip, easy_install и через python setup.py install из этого репозитория: https://github.com/abielr/mechanize. Все это безрезультатно, так как каждый раз, когда я вхожу в свой Python, я получаю:

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mechanize
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>> 

Установки, которые я запускал ранее, сообщали, что они успешно завершены, поэтому я ожидаю, что импорт будет работать. Что может быть причиной этой ошибки?

4b9b3361

Ответ 1

В моем случае это проблема разрешения. Пакет каким-то образом был установлен только с правами root rw, другой пользователь просто не может войти в него!

Ответ 2

У меня была та же проблема: script с import colorama был метать и ImportError, но sudo pip install colorama сообщал мне, что пакет уже установлен.

Мое исправление: запустите pip без sudo: pip install colorama. Затем пип согласился, что нужно установить, установить его, и мой script запущен.

Моя среда - Ubuntu 14.04 32-bit; Я думаю, что видел это до и после того, как я активировал свой виртуальный компьютер.

ОБНОВЛЕНИЕ: еще лучше, используйте python -m pip install <package>. Преимущество этого заключается в том, что, поскольку вы выполняете определенную версию python, в которую вы хотите установить пакет, pip однозначно устанавливает пакет в "правильный" python. Опять же, не используйте sudo в этом случае... тогда вы получите пакет в нужном месте, но, возможно, с (нежелательными) правами root.

Ответ 3

Это проблема пути python.

В моем случае у меня есть python, установленный в:

/Library/Frameworks/Python.framework/Versions/2.6/bin/python,

и в каталоге python2.6 нет каталога сайтов-пакетов.

Пакет (SOAPpy), который я установил по пипу, находится

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

И сайт-пакет не находится в пути python, все, что я сделал, это добавление пакетов сайта в PYTHONPATH навсегда.

  • Открыть терминал
  • Введите открытый .bash_profile
  • В текстовом файле, который появляется, добавьте эту строку в конец:

    export PYTHONPATH = $PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

  • Сохраните файл, перезапустите терминал, и вы закончили.

Ответ 4

Механизм импорта Python работает, действительно, так:

  • Ваш PYTHONPATH неверен,
  • Ваша библиотека не установлена ​​там, где вы думаете.
  • У вас есть другая библиотека с тем же именем, которая маскирует этот

Ответ 5

Я ударился головой о мой монитор на этом, пока молодой студент-хип сказал мне, что секрет заключается в установке "python setup.py install" внутри каталога модуля.

По какой-то причине запуск этой установки делает работу просто.

Чтобы быть ясным, если ваше имя модуля "foo":

[burnc7 (2016-06-21 15:28:49) git]# ls -l
total 1
drwxr-xr-x 7 root root  118 Jun 21 15:22 foo
[burnc7 (2016-06-21 15:28:51) git]# cd foo
[burnc7 (2016-06-21 15:28:53) foo]# ls -l
total 2
drwxr-xr-x 2 root root   93 Jun 21 15:23 foo
-rw-r--r-- 1 root root  416 May 31 12:26 setup.py
[burnc7 (2016-06-21 15:28:54) foo]# python setup.py install
<--snip-->

Если вы попытаетесь запустить setup.py из любого другого каталога, вызвав его путь, вы закончите установку borked.

НЕ РАБОТАЕТ:

python /root/foo/setup.py install

РАБОТАЕТ:

cd /root/foo
python setup.py install

Ответ 6

Я смог исправить эту проблему с помощью комбинированного подхода. Во-первых, я последовал совету Криса, открыл командную строку и набрал 'pip show packagename' Это обеспечило расположение установленного пакета.

Затем я открыл python и набрал "import sys", затем "sys.path", чтобы показать, где мой python ищет любые импортируемые мной пакеты. Увы, местоположение, показанное на первом шаге, не было в списке.

Заключительный шаг, я набрал 'sys.path.append(' package_location_seen_in_step_1 '). Вы можете повторить второй шаг, чтобы увидеть, что местоположение теперь находится в списке.

Шаг теста, попробуйте снова импортировать пакет... он работает.

Недостаток? Это временно, и вам нужно добавлять его в список каждый раз.

Ответ 7

Я столкнулся с этим при попытке использовать keyring, который я установил с помощью sudo pip install keyring. Как упоминалось в других ответах, это вопрос с разрешениями в моем случае.

Что сработало для меня:

  1. Удаленный брелок:
    • sudo pip uninstall keyring
  2. Я использовал параметр sudo -H и переустановил keyring:
    • sudo -H pip install keyring

Надеюсь это поможет.

Ответ 8

Я не мог заставить свой PYTHONPATH работать правильно. Я понял, добавив export исправил проблему:

(действительно работал)

export PYTHONPATH=$PYTHONPATH:~/test/site-packages

против.

(не работает)

PYTHONPATH=$PYTHONPATH:~/test/site-packages

Ответ 9

В моем случае я выполнил pip install Django==1.11, и он не будет импортировать из интерпретатора python.

Просматривая команды pip, я нашел pip show, который выглядел следующим образом:

> pip show Django
Name: Django
Version: 1.11
...
Location: /usr/lib/python3.4/site-packages
...

Обратите внимание, что в пункте указано "3.4". Я обнаружил, что команда python была связана с python2.7

/usr/bin> ls -l python
lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7

Рядом с этим я нашел ссылку под названием python3, поэтому я использовал ее. Вы также можете изменить ссылку на python3.4. Это тоже исправит.

Ответ 10

Я новичок в Python. Я исправил эту проблему, изменив путь интерпретатора проекта.
File → Settings → Project → Project Interpreter

Ответ 11

В моем случае это была проблема с отсутствующим файлом init.py в модуле, который я хотел импортировать в среде Python 2.7.

Python 3. 3+ имеет неявные пакеты пространства имен, которые позволяют ему создавать пакеты без файла init.py.

Ответ 12

У меня была эта точная проблема, но ни один из ответов выше не работал. Это сводило меня с ума, пока я не заметил, что sys.path был другим после того, как я импортировал из родительского проекта. Оказалось, что я использовал importlib, чтобы написать небольшую функцию, чтобы импортировать файл не в иерархию проекта. Плохая идея: я забыл, что сделал это. Хуже того, процесс импорта удалился с sys.path - и оставил его таким образом. Очень плохая идея.

Решение состояло в том, чтобы остановить это, и просто поместить файл, который мне нужен для импорта в проект. Другой подход состоял бы в том, чтобы поместить файл в свой собственный проект, поскольку его необходимо время от времени перестраивать, а перестройка может совпадать или не совпадать с перестройкой основного проекта.

Ответ 13

У меня была эта проблема с установкой 2.7 и 3.5 в моей системе, пытающейся протестировать бот телеграммы с Python-Telegram-Bot.

Я не мог заставить его работать после установки с помощью pip и pip3 с помощью sudo или без. Я всегда получал:

Traceback (most recent call last):
  File "telegram.py", line 2, in <module>
    from telegram.ext import Updater
  File "$USER/telegram.py", line 2, in <module>
    from telegram.ext import Updater
ImportError: No module named 'telegram.ext'; 'telegram' is not a package

Чтение сообщения об ошибке правильно сообщает мне, что python ищет в текущем каталоге для telegram.py. И правильно, у меня был script лежащий там telegram.py, и это было загружено python, когда я вызывал import.

Заключение, убедитесь, что у вас нет package.py в текущем рабочем каталоге при попытке импорта. (И внимательно прочитайте сообщение об ошибке).

Ответ 14

python -m pip install - помог мне решить эту проблему. Я начал сталкиваться с этой проблемой после обновления python to 2.7.14 (от 12)

Ответ 15

У меня была аналогичная проблема (в Windows), и первопричиной в моем случае было программное обеспечение ANTIVIRUS ! Он имеет функцию "Автоконтейнер", которая завершает работу с какой-то виртуальной машиной. Симптомы: pip install somemodule отлично работает в одном окне cmd-линии, а import somemodule не выполняется при выполнении из другого процесса с ошибкой

ModuleNotFoundError: No module named 'somemodule'

Надеюсь, это сэкономит некоторое время кому-то :)

Ответ 16

Может быть, немного не по теме, но у меня были проблемы с import PyYAML. Указывает, что вам нужно import yaml. (угадайте, это классический rtfm...)

Ответ 17

У меня была похожая проблема с использованием Django. В моем случае я мог импортировать модуль из оболочки Django, но не из .py, который импортировал модуль.
Проблема заключалась в том, что я запускал сервер Django (следовательно, выполнял .py) из другого virtualenv, из которого был установлен модуль.

Вместо этого экземпляр оболочки работал в правильном virtualenv. Следовательно, почему это работает.

Ответ 18

Это работает!!!

Это часто случается, когда модуль устанавливается в более старую версию python или другую директорию, не стоит беспокоиться, так как решение простое. - импортировать модуль из каталога, в который установлен модуль. Вы можете сделать это, сначала импортировав модуль Python sys затем импортировав по пути, по которому установлен модуль.

import sys
sys.path.append("directory in which module is installed")

import <module_name>

Ответ 19

Большинство возможных случаев уже были рассмотрены в решениях, просто я поделился своим случаем, мне пришло в голову, что я установил пакет в одной среде (например, X) и импортировал пакет в другой среде (например, Y), Поэтому всегда убедитесь, что вы импортируете пакет из среды, в которой вы установили пакет.

Ответ 20

Если другие упомянутые ответы вам не подходят, попробуйте удалить кэш pip и переустановить пакет. Моя машина работает под управлением Ubuntu14.04, и она была расположена под ~/.cache/pip. Удаление этой папки помогло мне.

Ответ 21

Что-то, что сработало для меня, было:

python -m pip install -user {package name}

Команда не требует sudo. Это было проверено на OSX Mojave.

Ответ 22

В моем случае мне также пришлось установить модуль для суперпользователя.

sudo su
pip install <module>

Очевидно, суперпользователь не может получить доступ к файлам обычных пользователей при определенных обстоятельствах.

Ответ 23

Для меня это было обеспечение того, чтобы версия модуля была согласована с версией Python, которую я использовал. Я построил изображение на коробке с Python 3.6, а затем внедрил его в изображение Docker, которое оказалось 3.7 установлен, а затем ударил меня по голове, когда Python говорил мне, что модуль не установлен...

36m для Python 3.6 bsonnumpy.cpython-36m-x86_64-linux-gnu.so

37m для Python 3.7 bsonnumpy.cpython-37m-x86_64-linux-gnu.so

Ответ 24

Я знаю, что это очень старый пост, но для меня у меня была проблема с 32-битным и 64-битным установленным питоном. Как только я удалил 32-битный питон, все заработало как надо.

Ответ 25

Я решил мою проблему, что те же библиотеки работали нормально в одном проекте (A), но импорт тех же библиотек в другом проекте (B) вызвал ошибку. Я использую Pycharm в качестве IDE в ОС Windows. Итак, после того, как я попробовал много потенциальных решений и не смог решить проблему, я сделал две вещи (удалил папку "Venv" и переконфигурировал интерпретатор):

1-В проекте (B) была папка с именем ("venv"), расположенная во внешних библиотеках /. Я удалил эту папку.

2-й шаг 1 (удаление папки "venv") вызывает ошибку в конфигурации интерпретатора Python, и в верхней части экрана отображается сообщение "Выбран неверный интерпретатор Python для проекта "и" настроить интерпретатор Python ", выберите эту ссылку, и он открывает новое окно. Там в раскрывающемся списке "Project Interpreter" есть красная линия показывает предыдущий неверный переводчик. Теперь откройте этот список и выберите Python Интерпретатор (в моем случае это Python 3.7). Нажмите "Применить" и "ОК" внизу и вы хорошо идти.

Примечание. Это была потенциальная проблема, когда виртуальная среда моего проекта (B) не распознавала уже установленные и работающие библиотеки.

Ответ 26

Если вы используете виртуальную среду, используйте pipenv install <module name> вместо pip install <module name>

Работал на меня.

Ответ 27

В моем случае оказалась чувствительность к регистру.

Я скопировал оператор import MyModule из кода коллеги, где имя модуля было верблюжьим. Не работал даже после импорта модуля (pip install MyModule). Но когда меняли на строчные (import mymodule) это работало. Возможно, связано с нечувствительностью к регистру на OSX? Точно сказать не могу. Я знаю, что лучшие практики - это имена модулей в нижнем регистре, но, надеюсь, это поможет некоторым другим не родным python-er. :)

Ответ 28

Когда вы устанавливаете через easy_install или pip, успешно ли он завершается? Что такое полный выход? Какую установку python вы используете? Возможно, вам придется использовать sudo перед вашей установкой, если вы устанавливаете модули в системный каталог (возможно, если вы используете установку python системы). В вашем вопросе не так много полезной информации, но некоторые инструменты, которые, вероятно, помогут:

  • echo $PYTHONPATH и/или echo $PATH: при импорте модулей Python ищет одну из этих переменных среды (списки каталогов, : с разделителями) для требуемого модуля. Проблемы с импортом часто возникают из-за отсутствия в этих списках нужного каталога

  • which python, which pip или which easy_install: они сообщают вам местоположение каждого исполняемого файла. Это может помочь узнать.

  • Используйте virtualenv, как предлагает @JesseBriggs. Он отлично работает с pip, чтобы помочь вам изолировать и управлять модулями и средой для отдельных проектов Python.

Ответ 29

Если вы узнаете, как использовать virtualenv (который довольно прост), у вас будет меньше таких проблем. Вы просто будете использовать virtualenv, а затем будете использовать локальные (для проекта) пакеты.

Он решает много головной боли для меня с путями, версиями и т.д.