Ответ 1
В моем случае это проблема разрешения. Пакет каким-то образом был установлен только с правами root rw, другой пользователь просто не может войти в него!
После установки 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
>>>
Установки, которые я запускал ранее, сообщали, что они успешно завершены, поэтому я ожидаю, что импорт будет работать. Что может быть причиной этой ошибки?
В моем случае это проблема разрешения. Пакет каким-то образом был установлен только с правами root rw, другой пользователь просто не может войти в него!
У меня была та же проблема: 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.
Это проблема пути 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 навсегда.
В текстовом файле, который появляется, добавьте эту строку в конец:
export PYTHONPATH = $PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
Механизм импорта Python работает, действительно, так:
Я ударился головой о мой монитор на этом, пока молодой студент-хип сказал мне, что секрет заключается в установке "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
Я смог исправить эту проблему с помощью комбинированного подхода. Во-первых, я последовал совету Криса, открыл командную строку и набрал 'pip show packagename' Это обеспечило расположение установленного пакета.
Затем я открыл python и набрал "import sys", затем "sys.path", чтобы показать, где мой python ищет любые импортируемые мной пакеты. Увы, местоположение, показанное на первом шаге, не было в списке.
Заключительный шаг, я набрал 'sys.path.append(' package_location_seen_in_step_1 '). Вы можете повторить второй шаг, чтобы увидеть, что местоположение теперь находится в списке.
Шаг теста, попробуйте снова импортировать пакет... он работает.
Недостаток? Это временно, и вам нужно добавлять его в список каждый раз.
Я столкнулся с этим при попытке использовать keyring, который я установил с помощью sudo pip install keyring
. Как упоминалось в других ответах, это вопрос с разрешениями в моем случае.
Что сработало для меня:
sudo pip uninstall keyring
-H
и переустановил keyring: sudo -H pip install keyring
Надеюсь это поможет.
Я не мог заставить свой PYTHONPATH работать правильно. Я понял, добавив export
исправил проблему:
(действительно работал)
export PYTHONPATH=$PYTHONPATH:~/test/site-packages
против.
(не работает)
PYTHONPATH=$PYTHONPATH:~/test/site-packages
В моем случае я выполнил 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
. Это тоже исправит.
Я новичок в Python. Я исправил эту проблему, изменив путь интерпретатора проекта. File → Settings → Project → Project Interpreter
В моем случае это была проблема с отсутствующим файлом init.py в модуле, который я хотел импортировать в среде Python 2.7.
Python 3. 3+ имеет неявные пакеты пространства имен, которые позволяют ему создавать пакеты без файла init.py.
У меня была эта точная проблема, но ни один из ответов выше не работал. Это сводило меня с ума, пока я не заметил, что sys.path был другим после того, как я импортировал из родительского проекта. Оказалось, что я использовал importlib, чтобы написать небольшую функцию, чтобы импортировать файл не в иерархию проекта. Плохая идея: я забыл, что сделал это. Хуже того, процесс импорта удалился с sys.path - и оставил его таким образом. Очень плохая идея.
Решение состояло в том, чтобы остановить это, и просто поместить файл, который мне нужен для импорта в проект. Другой подход состоял бы в том, чтобы поместить файл в свой собственный проект, поскольку его необходимо время от времени перестраивать, а перестройка может совпадать или не совпадать с перестройкой основного проекта.
У меня была эта проблема с установкой 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
в текущем рабочем каталоге при попытке импорта. (И внимательно прочитайте сообщение об ошибке).
python -m pip install
- помог мне решить эту проблему. Я начал сталкиваться с этой проблемой после обновления python to 2.7.14
(от 12
)
У меня была аналогичная проблема (в Windows), и первопричиной в моем случае было программное обеспечение ANTIVIRUS ! Он имеет функцию "Автоконтейнер", которая завершает работу с какой-то виртуальной машиной. Симптомы: pip install somemodule
отлично работает в одном окне cmd-линии, а import somemodule
не выполняется при выполнении из другого процесса с ошибкой
ModuleNotFoundError: No module named 'somemodule'
Надеюсь, это сэкономит некоторое время кому-то :)
Может быть, немного не по теме, но у меня были проблемы с import PyYAML
. Указывает, что вам нужно import yaml
. (угадайте, это классический rtfm...)
У меня была похожая проблема с использованием Django. В моем случае я мог импортировать модуль из оболочки Django, но не из .py, который импортировал модуль.
Проблема заключалась в том, что я запускал сервер Django (следовательно, выполнял .py) из другого virtualenv, из которого был установлен модуль.
Вместо этого экземпляр оболочки работал в правильном virtualenv. Следовательно, почему это работает.
Это работает!!!
Это часто случается, когда модуль устанавливается в более старую версию python или другую директорию, не стоит беспокоиться, так как решение простое. - импортировать модуль из каталога, в который установлен модуль. Вы можете сделать это, сначала импортировав модуль Python sys
затем импортировав по пути, по которому установлен модуль.
import sys
sys.path.append("directory in which module is installed")
import <module_name>
Большинство возможных случаев уже были рассмотрены в решениях, просто я поделился своим случаем, мне пришло в голову, что я установил пакет в одной среде (например, X
) и импортировал пакет в другой среде (например, Y
), Поэтому всегда убедитесь, что вы импортируете пакет из среды, в которой вы установили пакет.
Если другие упомянутые ответы вам не подходят, попробуйте удалить кэш pip и переустановить пакет. Моя машина работает под управлением Ubuntu14.04, и она была расположена под ~/.cache/pip
. Удаление этой папки помогло мне.
Что-то, что сработало для меня, было:
python -m pip install -user {package name}
Команда не требует sudo. Это было проверено на OSX Mojave.
В моем случае мне также пришлось установить модуль для суперпользователя.
sudo su
pip install <module>
Очевидно, суперпользователь не может получить доступ к файлам обычных пользователей при определенных обстоятельствах.
Для меня это было обеспечение того, чтобы версия модуля была согласована с версией 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
Я знаю, что это очень старый пост, но для меня у меня была проблема с 32-битным и 64-битным установленным питоном. Как только я удалил 32-битный питон, все заработало как надо.
Я решил мою проблему, что те же библиотеки работали нормально в одном проекте (A), но импорт тех же библиотек в другом проекте (B) вызвал ошибку. Я использую Pycharm в качестве IDE в ОС Windows. Итак, после того, как я попробовал много потенциальных решений и не смог решить проблему, я сделал две вещи (удалил папку "Venv" и переконфигурировал интерпретатор):
1-В проекте (B) была папка с именем ("venv"), расположенная во внешних библиотеках /. Я удалил эту папку.
2-й шаг 1 (удаление папки "venv") вызывает ошибку в конфигурации интерпретатора Python, и в верхней части экрана отображается сообщение "Выбран неверный интерпретатор Python для проекта "и" настроить интерпретатор Python ", выберите эту ссылку, и он открывает новое окно. Там в раскрывающемся списке "Project Interpreter" есть красная линия показывает предыдущий неверный переводчик. Теперь откройте этот список и выберите Python Интерпретатор (в моем случае это Python 3.7). Нажмите "Применить" и "ОК" внизу и вы хорошо идти.
Примечание. Это была потенциальная проблема, когда виртуальная среда моего проекта (B) не распознавала уже установленные и работающие библиотеки.
Если вы используете виртуальную среду, используйте pipenv install <module name>
вместо pip install <module name>
Работал на меня.
В моем случае оказалась чувствительность к регистру.
Я скопировал оператор import MyModule
из кода коллеги, где имя модуля было верблюжьим. Не работал даже после импорта модуля (pip install MyModule
). Но когда меняли на строчные (import mymodule
) это работало. Возможно, связано с нечувствительностью к регистру на OSX? Точно сказать не могу. Я знаю, что лучшие практики - это имена модулей в нижнем регистре, но, надеюсь, это поможет некоторым другим не родным python-er. :)
Когда вы устанавливаете через easy_install
или pip
, успешно ли он завершается? Что такое полный выход? Какую установку python вы используете? Возможно, вам придется использовать sudo
перед вашей установкой, если вы устанавливаете модули в системный каталог (возможно, если вы используете установку python системы). В вашем вопросе не так много полезной информации, но некоторые инструменты, которые, вероятно, помогут:
echo $PYTHONPATH
и/или echo $PATH
: при импорте модулей Python ищет одну из этих переменных среды (списки каталогов, :
с разделителями) для требуемого модуля. Проблемы с импортом часто возникают из-за отсутствия в этих списках нужного каталога
which python
, which pip
или which easy_install
: они сообщают вам местоположение каждого исполняемого файла. Это может помочь узнать.
Используйте virtualenv, как предлагает @JesseBriggs. Он отлично работает с pip
, чтобы помочь вам изолировать и управлять модулями и средой для отдельных проектов Python.
Если вы узнаете, как использовать virtualenv (который довольно прост), у вас будет меньше таких проблем. Вы просто будете использовать virtualenv, а затем будете использовать локальные (для проекта) пакеты.
Он решает много головной боли для меня с путями, версиями и т.д.