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

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

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

Я попытался установить из pip, easy_install и via 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 на работе, все хорошо, устанавливается и импортируется как обычно).

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

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

Out put of 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 ответов


в моем случае это проблема разрешения. Пакет был как-то установлен только с разрешением 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 / версии / 2.6 / bin / python,

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

пакет (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:/система/библиотека/фреймворки / Python.фреймворк / версии / 2.6/lib / python2.6 / сайт-пакеты/

  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, я нашел 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-Бот.

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

последний шаг, я набрал 'Сыс.путь.функции 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 ищет одну из этих переменных среды (списки каталогов,: delimited) для модуля, который вы хотите. Проблемы с импортом часто возникают из-за отсутствия правильного каталога в этих списках

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

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


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

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