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

# #python #python-3.x #google-cloud-platform #pip #conda

Вопрос:

После установки mechanize я, похоже, не смогу его импортировать.

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

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

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

Комментарии:

1. Вы уверены, что он не был установлен до версии 2.6 (которая по умолчанию установлена в ubuntu? (по крайней мере, это есть в моем debian)

2. что ж, результат простой установки показывает, что он установлен до 2.7: Установлен /usr/локальный/lib/python2.7/dist-пакеты/механизация-0.2.6.dev_20130112-py2.7.яйцо

3. Я только что пробовал это во всех смыслах … setup.py, easy_install, pip-из pypi и репо, но я не могу заставить его потерпеть неудачу. Не могли бы вы проверить sys.path , ищете ли вы в нужных местах, ls -laR /usr/local/lib/python2.7/dist-packages/mech* проверить наличие проблем с разрешениями и посмотреть imp.find_module("mechanize") , как отличить ошибки «не могу найти» и «не могу выжить» при импорте?

4. @DSM добавил эту информацию в исходный пост

5. @RoybertSoylend: спасибо. К сожалению, это исключает обе из двух теорий, которые я рассматривал. :-/

Ответ №1:

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

Комментарии:

1. Это случилось со мной, когда я просто бежал sudo pip install ... . Простое исправление: sudo chmod -R ugo rX /lib/python2.7/site-packages/

2. Я сталкивался с этим много раз, и я думаю, что только что обнаружил причину: umask передается через sudo, поэтому, если ваша личная umask закрыта и вы используете sudo для установки, файлы и каталоги будут чрезмерно ограничены. Если вы сначала просто выполните su, а затем выполните установку из полной корневой оболочки, полученная установка будет полезной (по крайней мере, для меня). Это было для pip, но может относиться и к apt-get. Если другие подтвердят эту причину, возможно, вы захотите соответствующим образом изменить ответ?

3. Добавление в комментарий jozxyqk: убедитесь, что вы выбрали правильный каталог, выполнив $ pip show <имя_пакета>

4. То же самое и для меня. Я работаю с Python 3.6 на Mac, поэтому sudo chmod 777 /usr/local/lib/python3.6/site-packages сделал свое дело

5. sudo 777-это всегда очень плохая идея

Ответ №2:

У меня была та же проблема: скрипт с import colorama выбрасывал и импортировал, но sudo pip install colorama говорил мне «пакет уже установлен».

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

Моя среда-32-разрядная Ubuntu 14.04; Я думаю, что видел это до и после активации virtualenv.

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

Комментарии:

1. в качестве альтернативы вы можете использовать флаг sudo-H

2. Спасибо, python -m pip install <package> покажи мою проблему.

Ответ №3:

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

В моем случае у меня установлен python в:

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

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

Упаковка(Соппи) Я установил с помощью pip, находится

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

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

  1. Откройте терминал
  2. Введите open .bash_profile
  3. В появившемся текстовом файле добавьте эту строку в конце:
     export PYTHONPATH=$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
     
  4. Сохраните файл, перезагрузите терминал, и все готово

Комментарии:

1. Это помогло мне заставить Дженкинса работать с selenium python.

2. Это сработало для меня при запуске celery через супервизор, когда мой сценарий bash вызвал мой сценарий сельдерея; сценарий сельдерея не смог импортировать уже установленные модули внутри моего pip. Огромное спасибо.

3. Примечание. Еще одна возможность ошибки импорта заключается в том, что на вашем компьютере установлено несколько версий Python. Например, один из системного Python и один из Miniconda или Anaconda. Поэтому обязательно всегда используйте правильный соответствующий «pip».

Ответ №4:

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

  1. Ваш ПУТЬ к ПИТОНУ неверен,
  2. Ваша библиотека установлена не там, где вы думаете
  3. У вас есть другая библиотека с тем же именем, маскирующая эту

Комментарии:

1. В данном случае это не может быть вариантом 3; это не приведет к появлению импортера.

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

3. Вариант 4: Ваш путь к ПИТОНУ правильный, ваша библиотека находится там, где вы хотите, у вас нет библиотеки, скрывающей это… но из-за того, что вы использовали sudo pip install его, он был установлен с правами root, и во время импорта что-то происходит из-за отсутствия доступа для чтения или записи.

4. Не совсем верно, @MartijnPieters: если бы был импорт формы «из <пакета> импорт <пакета><foo>», и если бы в мешающем пакете не было «foo», то вы получили бы ошибку импорта для варианта 3.

5. @DanH конечно, но это не та форма, которую использует операция.

Ответ №5:

Я смог исправить эту проблему с помощью комбинированного подхода. Сначала я последовал совету Криса, открыл командную строку и набрал «имя пакета pip show», указав местоположение установленного пакета.

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

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

Тестовый шаг, попробуйте снова импортировать пакет… это работает.

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

Ответ №6:

Я бился головой об этот монитор до тех пор, пока молодой практикант не сказал мне, что секрет в том, чтобы «питон setup.py установить» внутри каталога модулей.

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

Для ясности, если ваш модуль называется «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 из любого другого каталога, указав его путь, вы в конечном итоге получите неудачную установку.

НЕ РАБОТАЕТ:

 python /root/foo/setup.py install
 

ДЕЙСТВИТЕЛЬНО РАБОТАЕТ:

 cd /root/foo
python setup.py install
 

Ответ №7:

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

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

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

Ответ №8:

В PyCharm я исправил эту проблему, изменив путь интерпретатора проекта.

File -> Settings -> Project -> Project Interpreter

File -> Invalidate Caches… может потребоваться впоследствии.

Комментарии:

1. Или вот быстрый способ, если вы используете PyCharm: просто File -> Settings -> Project -> Project Interpreter -> Available Packages найдите нужный пакет здесь и просто нажмите установить.

Ответ №9:

Я не мог заставить свой ПУТЬ к ПИТОНУ работать должным образом. Я понял, что добавление export исправило проблему:

(сработало)

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

против.

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

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

Ответ №10:

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

Просматривая команды пипа, я нашел 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 . Это бы тоже все исправило.

Ответ №11:

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

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

Ответ №12:

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

 python -m pip install -user {package name}
 

Для выполнения команды не требуется sudo. Это было протестировано на OSX Mojave.

Ответ №13:

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

Ответ №14:

Кроме того, убедитесь, что вы не путаете pip3 с. pip Я обнаружил, что пакет, установленный с pip помощью, не работал, python3 и наоборот.

Ответ №15:

У меня тоже была эта проблема.. пакет был установлен на Python 3.8.0, но VS Code запускал мой скрипт, используя более старую версию (3.4)

исправить в терминале:

пи .пи

Убедитесь, что вы устанавливаете пакет на правильную версию Python

Ответ №16:

У меня была установлена colorama через pip, и я получал «Импортер: нет модуля с именем colorama».

Поэтому я поискал с помощью «найти», нашел абсолютный путь и добавил его в скрипт следующим образом:

 import sys
sys.path.append("/usr/local/lib/python3.8/dist-packages/")
import colorama 
 

И это сработало.

Ответ №17:

Это решение применимо не ко всем. Только для определенного набора новичков (таких как Я), которые выполнили определенный набор действий. Ни один из вышеперечисленных ответов не сработал для меня.

Итак, что вызвало проблему: ранее у меня был проект с настройкой venv внутри root. Позже я создал нового пользователя и решил перенести проект к этому пользователю. И вместо того, чтобы перемещать только исходные файлы и устанавливать зависимости заново, я переместил весь проект вместе с папкой venv новому пользователю (потому что я не знал об этих проблемах). После этого зависимости, которые я установил, добавлялись в папку global site-packages вместо той, что была внутри venv. Таким образом, код, запущенный внутри этого env, не смог получить доступ к этим зависимостям.

Решение: Просто удалил папку venv и воссоздал ее снова.

     $ deactivate
    $ rm -rf venv
    $ python3 -m venv venv
    $ source venv/bin/activate
    $ pip install -r requirements.txt
 

Ответ №18:

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

  • echo $PYTHONPATH и/или echo $PATH : при импорте модулей Python выполняет поиск в одной из этих переменных среды (списки каталогов с : разделителями) нужного вам модуля. Проблемы с импортом часто возникают из-за отсутствия нужного каталога в этих списках
  • which python , which pip , или which easy_install : они сообщат вам местоположение каждого исполняемого файла. Это может помочь узнать.
  • Используйте virtualenv, как предлагает @JesseBriggs. Он очень хорошо работает pip , чтобы помочь вам изолировать и управлять модулями и средой для отдельных проектов Python.

Ответ №19:

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

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

Ответ №20:

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

Я не мог заставить его работать после установки с 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 ищет в текущем каталоге a telegram.py . И верно, у меня там лежал сценарий под названием telegram.py и это было загружено python, когда я позвонил import .

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

Ответ №21:

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

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

Ответ №22:

Это Работает!!!

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

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

import <module_name>
 

Ответ №23:

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

Ответ №24:

Для меня это было обеспечение того, чтобы версия модуля соответствовала версии Python, которую я использовал.. Я построил образ на коробке с Python 3.6, а затем ввел его в образ докера, в котором было установлено 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

Комментарии:

1. pip install версия, соответствующая версии Python, которую вы используете. Какую ошибку вы получаете и каков результат python --version

2. python —версия дает мне : Python 3.7.7, и когда я проверяю, где установлен пакет с pip, показывает, что librosa дает ; Местоположение: /home/ec2-пользователь/anaconda3/lib/python3.7/site-пакеты как означает, что пакет находится в нужном месте, но когда я импортирую пакет, дает : нет имени модуля, я работаю над AWS Sagemaker env Pytorch_p36

3. предположительно, вы хотите использовать pytorch_p37 ?

4. там нет pytorch_p37

Ответ №25:

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

Ответ №26:

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

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

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

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

Ответ №27:

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

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

Комментарии:

1. pipenv не найден

Ответ №28:

Как сделал для меня сегодня друг, вот что мне помогло (я использую Windows):

Нажмите «Настройка» -> «Проект» ->> «Интерпретатор проекта». Здесь, в окне справа, есть строка с заголовком «Интерпретатор проекта» слева. Щелкните по этой строке, и откроется несколько дополнительных строк.

Теперь нажмите на строку «Показать все». Откроется окно. В этом окне нажмите на маленький знак » » в правом верхнем углу.

Откроется новое окно. Слева есть 4 вкладки, нажмите самую верхнюю, на которой написано «Виртуальная среда». Теперь в окне справа отметьте опцию «Существующая среда». Строка «Переводчик» станет хорошо видимой. Нажмите кнопку » … » справа от строки.

Теперь откроется окно просмотра. Перейдите в каталог, в котором вы установили сам Python. Не тот, что с PyCharm. Когда вы доберетесь туда, выберите ‘python.exe’ файл и нажмите OK (окно исчезнет).

Снова нажмите » ОК » (это окно тоже исчезнет).

Теперь в этом окне убедитесь, что созданная вами новая строка отмечена, и снова нажмите «ОК».

Теперь все установленные пакеты должны быть видны в интерпретаторе проекта и читаться вашей программой.

Ответ №29:

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

 ModuleNotFoundError: No module named 'somemodule'
 

Ответ №30:

В моем случае (виртуальная машина Ubuntu 20.04 на хосте WIN10) у меня неупорядоченная ситуация со многими установленными версиями Python и различными точками общей библиотеки (установленными с помощью pip во многих точках файловой системы). Я имею в виду версию Python 3.8.10. После многих тестов я нашел предложение по поиску в Google (но «Извините, у меня нет ссылки»). Вот что я сделал, чтобы решить эту проблему :

  1. Из сеанса оболочки на виртуальной машине Ubuntu 20.04 (внутри дома, в моем случае /home/hduser) я запустил сеанс записной книжки Jupyter с помощью команды «Записная книжка jupyter».
  2. Затем, когда jupyter работал, я открыл файл .ipynb, чтобы давать команды.
  3. Во-первых : список pip — > дайте мне список установленных пакетов, и sympy не присутствовал (хотя я установил его с помощью команды «sudo pip install sympy».
  4. Последний раз с помощью команды !pip3 установите sympy (внутри сеанса ноутбука jupyter) Я решил проблему, вот снимок экрана : введите описание изображения здесь
  5. Теперь, с !pip-списком, пакет «симпатия» присутствует и работает : введите описание изображения здесь