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


157

После установки 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
>>> 

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


Вы можете показать нам результат работы easy_install? Кроме того , пожалуйста , проверьте полный путь easy_install, pipи из python.
— larsks

Вы уверены, что он не был установлен на 2.6 (что по умолчанию на ubuntu? (По крайней мере, на моем debian)
— dav1d

ну, вывод простой установки показывает, что он установлен в 2.7: Установлен /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
— roy

@larks - добавил эту информацию в исходный пост
— roy

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

Ответы:


103

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


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

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

Добавление к комментарию jozxyqk: убедитесь, что вы выбрали правильный каталог, выполнив $ pip show <package_name>
— Федерико

3
Мне то же. Я работаю с Python 3.6 на Mac, так sudo chmod 777 /usr/local/lib/python3.6/site-packagesчто трюк сделал
— Антонио Серрано

9
sudo 777 - всегда очень плохая идея
— Маркс

89

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

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

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

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


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

21

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

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

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

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

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

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

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

  1. Откройте Терминал
  2. Введите open .bash_profile
  3. В появившемся текстовом файле добавьте в конец эту строку:

    экспорт PYTHONPATH = $ PYTHONPATH: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

  4. Сохраните файл, перезапустите Терминал, и все готово.

Это сработало для меня, когда Дженкинс работал с селеновым питоном.
— edst

Это сработало для меня при запуске сельдерея через супервизор, когда мой сценарий bash вызвал мой сценарий сельдерея; Сценарий сельдерея не смог импортировать уже установленные модули внутри моего пипса. Благодаря тонну.
— Шивам Шарма

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

9

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

  1. Ваш PYTHONPATH неправильный,
  2. Ваша библиотека не установлена ​​там, где вы думаете
  3. У вас есть другая библиотека с тем же именем, маскирующая эту

1
В этом случае не может быть варианта 3; это не вызовет ошибку ImportError.
— Мартейн Питерс

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

3
Вариант 4: ваш PYTHONPATH правильный, ваша библиотека находится там, где вы этого хотите, у вас нет библиотеки, маскирующей это ... но поскольку вы использовали sudo pip installее, она была установлена ​​с привилегиями root, и во время импорта что-то бомбит из-за отсутствия чтение или запись.
— Дэн Х

2
Не совсем правда, @MartijnPieters: если есть импорт формы «из <пакет> импорт <Foo>», и если пакет мешающий не было «Foo», то вы получите сообщение об ошибке импорта для варианта 3.
— Dan H

@DanH конечно, но это не та форма, которую использует OP.
— Мартин Питерс

9

Я бился головой об этом по монитору до тех пор, пока молодой практикант не сказал мне, что секрет заключается в "установке python 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

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

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

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

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

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


5

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

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

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

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


3

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


2

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

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

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

vs.

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

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

2

В моем случае я запустил, 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. Это тоже исправит.


1

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

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


1

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


1

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

python -m pip install -user {package name}

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


1

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


0

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

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

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

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


0

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

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


0

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

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


0

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

ModuleNotFoundError: No module named 'somemodule'

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


0

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

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


0

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


0

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

sudo su
pip install <module>

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


0

Для меня это было обеспечение того, чтобы версия модуля была согласована с версией 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


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

python --version дает мне: Python 3.7.7, и когда я проверяю, где установлен пакет, с помощью команды pip show librosa дает; Расположение: /home/ec2-user/anaconda3/lib/python3.7/site-packages, как это означает, что пакет находится в нужном месте, но когда я импортирую пакет, выдает: нет имени модуля Я работаю над окружением AWS Sagemaker Pytorch_p36
— Валид Буссета

предположительно вы хотите использовать pytorch_p37?
— streetter

pytorch_p37 нет
— Валид Бусета

0

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


0

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

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

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

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


0

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

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


pipenv not found
— Валид Бусета

0

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

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

py .py

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


0

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

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

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

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

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

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

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

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


0

Самое простое решение, которое сработало для меня, о котором я не упоминал в этой теме:

У меня установлено несколько версий Python, но я пытался использовать Python3.7, поэтому мне пришлось использовать:

sudo pip3.7 install <package>


-1

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


-1

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

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

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

import <module_name>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.