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


текущие проблемы с установкой python (2.7.3) на моей машине Ubuntu 12.04 и импортом модулей.

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

другие компьютеры, на которых я устанавливаю это, не имеют проблем (например, Mac или Windows-машина на работе, все хорошо, устанавливается и импортируется как обычно).

это почти сводит меня с ума в этот момент, и я просто хочу поработать.

обновить информацию (в ответ на комментарии):

выход из easy_install mechanize и путь:

<me>@<host>:~$ sudo easy_install mechanize
[sudo] password for <me>: 
Processing mechanize
Writing /home/<me>/mechanize/setup.cfg
Running setup.py -q bdist_egg --dist-dir /home/<me>/mechanize/egg-dist-tmp-zXwJ_d
warning: no files found matching '*.html' under directory 'docs'
warning: no files found matching '*.css' under directory 'docs'
warning: no files found matching '*.js' under directory 'docs'
mechanize 0.2.6.dev-20130112 is already the active version in easy-install.pth

Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
Processing dependencies for mechanize==0.2.6.dev-20130112
Finished processing dependencies for mechanize==0.2.6.dev-20130112
<me>@<host>:~$ ^C
<me>@<host>:~$ which pip
/home/<me>/bin/pip
<me>@<host>:~$ which python
/home/<me>/bin/python
<me>@<host>:~$ which easy_install
/home/<me>/bin/easy_install
<me>@<host>:~$ 

ВТОРОЕ ОБНОВЛЕНИЕ: Кажется, что-то с mechanize, как будто я добавляю любой другой случайный пакет через pip, нет никаких проблем (в этом случае html5lib)

ТРЕТЬЕ ОБНОВЛЕНИЕ (@DSM)

1)
>>> sys.path
['', '/home/<me>/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',      '/home/<me>/local/lib/python2.7/site-packages/virtualenvwrapper-2.11-py2.7.egg',    '/home/<me>/src/geopy', '/home/<me>/local/lib/python2.7/site-packages/BeautifulSoup-3.2.0-py2.7.egg', '/home/<me>/local/lib/python2.7/site-packages/django_sorting-0.1-py2.7.egg' ...  <so on and so forth but mechanize is not here>]
>>>

2) *pretty long output of which most looks like:*
<me>@<host>:~$ ls -laR /usr/local/lib/python2.7/dist-packages/mech*
/usr/local/lib/python2.7/dist-packages/mechanize:
total 1144
...lots of other files, pretty much same permissions...
-rw-r--r--  1 root staff  24916 Jan 11 01:19 _mechanize.py
...lots of other files...

3)
>>> import imp
>>> imp.find_module("mechanize")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>>

ЧЕТВЕРТОЕ РЕДАКТИРОВАНИЕ (это становится смешно :/): Это похоже на проблему, которую я имел раньше (полное удаление и новая установка python на Ubuntu 12.04), где, если я запускаю все с sudo, это нормально, но я не знаю, должен ли я это делать... что случилось с разрешения?

15 68

15 ответов:

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

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

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

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

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

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

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

/ Библиотека / Фреймворки / Python.framework / Versions / 2.6 / bin / python,

и в python2.6 нет каталога site-packages.

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

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

и site-package не находится в пути python, все, что я сделал, это добавить site-packages в PYTHONPATH постоянно.

  1. открыть терминал
  2. тип открытые .файл
  3. в текстовом файле, который появляется, добавьте эту строку в конце:

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

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

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

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

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

НЕ Работа:

python /root/foo/setup.py install

РАБОТАЕТ:

cd /root/foo
python setup.py install

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

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

(сделал работу)

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

и

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

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

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

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

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

надеюсь, что это помогает.

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

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

у меня была эта проблема с 2.7 и 3.5, установленными в моей системе, пытаясь проверить Бот telegram с 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 в текущей рабочей директории при попытке импорта. (И внимательно прочитайте сообщение об ошибке).

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

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

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

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

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

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

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

ModuleNotFoundError: No module named 'somemodule'

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

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

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

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

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

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

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