Python установлен в локальном каталоге.
Мое дерево каталогов выглядит так:
(local directory)/site-packages/toolkit/interface.py
Мой код здесь:
(local directory)/site-packages/toolkit/examples/mountain.py
Чтобы запустить пример, я пишу python mountain.py
, и в коде у меня есть:
from toolkit.interface import interface
И я получаю ошибку:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
Я уже проверил sys.path
и там у меня есть каталог /site-packages
. Кроме того, у меня есть файл __init__.py.bin
в папке набора инструментов, чтобы указать Python, что это пакет. У меня также есть __init__.py.bin
в каталоге примеров.
Я не знаю, почему Python не может найти файл, когда он находится в sys.path
. Любые идеи? Это может быть проблема с разрешениями? Мне нужно разрешение на исполнение?
python
importerror
python-import
Эдуардо
источник
источник
755
. Это потому , чтоumask
на машине был0027
из - за которойothers
не былоread
разрешения , вызывающий модуль не может быть считан. Добавлениеread
разрешения исправило мою проблему. Стоит проверить разрешение целевого каталога после установки.interface
(был конфликт).Ответы:
Основываясь на ваших комментариях к посту Орипа, я думаю, вот что произошло:
__init__.py
на окнах.__init__.py
(сейчас называется__init__.py.bin
) означает, что Python не понимает инструментарий как пакет.__init__.py
в соответствующем каталоге и все работает ...?источник
.bin
.python driver.py
когда я должен был использовать,python3 driver.py
так как я установил сpip3
.Имеет ли
иметь
__init__.py
?Для того, чтобы сделать импорт ходить через ваши каталоги , каждый каталог должен иметь
__init__.py
файл.источник
Я столкнулся с чем-то очень похожим, когда делал это упражнение в LPTHW; Я никогда не мог заставить Python распознать, что у меня есть файлы в каталоге, из которого я звонил. Но я смог заставить его работать в конце. То, что я сделал, и что я рекомендую, это попробовать это:
(ПРИМЕЧАНИЕ: Исходя из вашего первого поста, я предполагаю, что вы используете машину на базе * NIX и запускаете что-то из командной строки, так что этот совет адаптирован к этому. Поскольку я запускаю Ubuntu, это то, что я и сделал)
1) Измените каталог (cd) на каталог выше каталога, в котором находятся ваши файлы. В этом случае вы пытаетесь запустить
mountain.py
файл и пытаетесь вызватьtoolkit.interface.py
модуль, который находится в отдельных каталогах. В этом случае вы перейдете в каталог, содержащий пути к обоим этим файлам (или, другими словами, в ближайший каталог, к которому относятся пути обоих этих файлов). Который в данном случае являетсяtoolkit
каталогом.2) Когда вы находитесь в
tookit
каталоге, введите эту строку кода в командной строке:export PYTHONPATH=.
Это устанавливает PYTHONPATH на «.», Что в основном означает, что ваш PYTHONPATH теперь будет искать любые вызываемые файлы в каталоге, в котором вы находитесь в данный момент (и более того, в ветвях подкаталогов каталога, в котором вы находитесь. Таким образом, он не только смотрит в ваш текущий каталог, но и во все каталоги, которые находятся в вашем текущем каталоге).
3) После того, как вы установили PYTHONPATH на шаге выше, запустите ваш модуль из вашего текущего каталога (
toolkit
каталога). Теперь Python должен найти и загрузить указанные вами модули.Надеюсь это поможет. Я был очень разочарован этим сам.
источник
set PYTHONPATH=.
.В * nix также убедитесь, что PYTHONPATH настроен правильно, особенно если он имеет следующий формат:
(Помните
.:
в начале, чтобы он мог искать и в текущем каталоге.)Это также может быть в других местах, в зависимости от версии:
источник
.:/usr/lib/python
,.:/usr/lib/python2.6
,.:/usr/lib/python2.7
и т.д. , в зависимости от версии#!/usr/bin/python
в конце файла тоже должно работать, верно?Я решил свою собственную проблему, и я напишу краткое изложение того, что было неправильно, и решение:
Файл должен быть назван точно
__init__.py
. Если расширение отличается, как в моем случае,.py.bin
то Python не может перемещаться по каталогам, а затем он не может найти модули. Для редактирования файлов вам нужно использовать редактор Linux, например, vi или nano . Если вы используете редактор Windows, это напишет некоторые скрытые символы.Другая проблема, которая повлияла на это, заключалась в том, что у меня была установлена другая версия Python от корня, поэтому, если кто-то работает с локальной установкой python, убедитесь, что установкой Python, на которой запущены программы, является локальный Python. Чтобы проверить это, просто сделайте
which python
и посмотрите, находится ли исполняемый файл в вашем локальном каталоге. Если нет, измените путь, но убедитесь, что локальный каталог Python находится раньше, чем другой Python.источник
__init__.py
файлы помещены в соответствующую директорию, но я вручную установил пакет, используяsetup.py
. Как установка нового пакета помешала бы импорту.простое решение - установить модуль, используя
python -m pip install <library-name>
вместоpip install <library-name>
вас возможность использовать sudo в случае ограничений администратораисточник
python -m
достичь передpip install
?python -m pip...
работает, ноpip...
не сделал: они фактически одно и то же, предполагая, что они на самом деле находятся в одномpython
каталоге. Возможно, наблюдаемая ситуация состояла в том, что автономнаяpip
программа не была доступна в некоторых старых версиях Python (но теперь она в последних 2.7 и 3.x). В этом случае онpython
находился в локальном virtualenv иpip
не был, поэтомуpython -m pip install
установил бы в локальном virtualenv, тогда какpip
попытался бы установить в системном python (и потерпел неудачу без sudo). В любом случае это не имеет смысла.Чтобы пометить каталог как пакет, вам нужен файл с именем
__init__.py
, это помогает?источник
Используя
PyCharm
(часть пакета JetBrains), вам нужно определить каталог скриптов как Source:Right Click > Mark Directory as > Sources Root
источник
Вы читаете, что этот ответ говорит, что вы находитесь
__init__.py
в правильном месте, вы установили все зависимости и все еще получаетеImportError
.Я столкнулся с аналогичной проблемой, за исключением того, что моя программа работала нормально при запуске с использованием PyCharm, но с вышеприведенной ошибкой, когда я запускал ее из терминала. Покопавшись дальше, я обнаружил, что
PYTHONPATH
не было записи для каталога проекта. Итак, я устанавливаю дляPYTHONPATH
каждого оператора импорта работает на PyCharm, но не из терминала :Есть еще один способ сделать это, используя
sys.path
:Вы можете использовать вставку / добавление в зависимости от порядка поиска проекта.
источник
Для меня это было что-то действительно глупое. Я установил библиотеку, используя,
pip3 install
ноpython program.py
в отличие отpython3 program.py
.источник
Ага. Вам нужен каталог, содержащий
__init__.py
файл, который является файлом, который инициализирует пакет. Вот, посмотрите на это .источник
например: / etc / environment
PYTHONPATH = $ PYTHONPATH: / OPT / folder1: / OPT / folder2
/ Опт / folder1 / Foo
/ Опт / folder2 / Foo
И, если вы пытаетесь импортировать файл foo, python не будет знать, какой файл вам нужен.
из foo import ... >>> importerror: нет модуля с именем foo
источник
Мои два цента:
Кос:
Это чертовски смутило меня - просматривал посты и посты, в которых предлагались уродливые взломы сиспатов (как вы видите,
__init__.py
все мои были там). Хорошо получается, что game / oblivion.py и game / oblivion приводили в замешательство питона, который выплевывал довольно бесполезный «Нет модуля с именем RecordGroups». Я был бы заинтересован в обходном пути и / или ссылках, документирующих это (одноименное) поведение -> РЕДАКТИРОВАТЬ (2017.01.24) - посмотрите, что если у меня есть модуль и пакет с тем же именем? Интересно нормально пакеты имеют приоритет, но, видимо, наша программа запуска нарушает это.EDIT (2015.01.17): Я не упомянул , мы используем пользовательские пусковые расчлененные здесь .
источник
game.oblivion.RecordGroups !== game/oblivion/patchers/RecordGroups.py
Возможно, вы захотите исправить это, добавив ваш код на python:game.oblivion.patchers.RecordGroups
game.oblivion.__init__.py
но, возможно, придется проверить этоLinux: Импортированные модули находятся в /usr/local/lib/python2.7/dist-packages
Если вы используете модуль, скомпилированный в C, не забудьте chmod файл .so после
sudo setup.py install
.источник
В моем случае проблема заключалась в том, что я связывался с debug
python
&boost::Python
, что требует, чтобы расширение былоFooLib_d.pyd
не простоFooLib.pyd
; переименование файла или обновлениеCMakeLists.txt
свойств исправили ошибку.источник
Если вы перепробовали все методы, описанные выше, но не смогли, возможно, ваш модуль имеет то же имя, что и встроенный модуль. Или модуль с таким же именем, существующий в папке с более высоким приоритетом,
sys.path
чем у вашего модуля.Для отладки говорите свои
from foo.bar import baz
жалобыImportError: No module named bar
. Меняется наimport foo; print foo
, который покажет путьfoo
. Это то, что вы ожидаете?Если нет, переименуйте
foo
или используйте абсолютный импорт .источник
ImportError: No module named foo
.Моя проблема заключалась в том, что я добавил каталог с
__init__.py
файлом в PYTHONPATH, когда на самом деле мне нужно было добавить его родительский каталог.источник
Всем тем, у кого еще есть эта проблема. Я считаю, что Pycharm путают с импортом. Для меня, когда я пишу «из пространства имен импортировать что-то», предыдущая строка подчеркнута красным, сигнализируя, что есть ошибка, но она работает. Однако «из .namespace import что-то» не подчеркивается, но также не работает.
Пытаться
источник
Исправил мою проблему, написав
print (sys.path)
и обнаружив, что python использует устаревшие пакеты, несмотря на чистую установку. Удаляя эти сделанные Python автоматически использовать правильные пакеты.источник
В моем случае, потому что я использую PyCharm и PyCharm, создаю 'venv' для каждого проекта в папке проекта, но это всего лишь мини-env python. Хотя вы установили необходимые библиотеки в Python, но в вашем собственном проекте 'venv' он недоступен. Это реальная причина ошибки «ImportError: в PyCharm нет модуля с именем xxxxxx». Чтобы решить эту проблему, вы должны добавить библиотеки в свой проект env, выполнив следующие действия:
Наслаждаться.
источник
После того, как я перенес ту же проблему, я решил удалить все
pyc
файлы из моего проекта, похоже, что эти кэшированные файлы как-то вызывали эту ошибку.Самым простым способом, который я нашел для этого, было перейти к папке моего проекта в проводнике Windows и выполнить поиск
*.pyc
, затем выбрать все ( Ctrl+ A) и удалить их ( Ctrl+X ).Возможно, я мог бы решить свои проблемы, просто удалив конкретный
pyc
файл, но я никогда не пробовал этоисточник
Я столкнулся с той же проблемой
Import error
. Кроме того, библиотека была установлена на 100% правильно. Источником проблемы было то, что на моем ПК была установлена 3 версия python (пакет anaconda). Вот почему библиотека была установлена не в нужном месте. После этого я просто изменил правильную версию python в моей IDE PyCharm.источник
У меня была такая же ошибка. Это было вызвано тем, что кто-то создал папку в той же папке, что и мой скрипт, имя которого конфликтовало с модулем, который я импортировал из другого места. Вместо того, чтобы импортировать внешний модуль, он заглянул внутрь этой папки, которая явно не содержала ожидаемых модулей.
источник
У меня была такая же проблема (Python 2.7 Linux), я нашел решение, и я хотел бы поделиться им. В моем случае у меня была структура ниже:
В main.py я безуспешно пробовал все комбинации ниже:
Решение было намного проще, чем я думал. Я переименовал папку «Буклет» в «Брошюра» и все. Теперь Python может импортировать класс Question, как обычно, используя код main.py:
Из этого я могу сделать вывод, что имена пакетов (папки), такие как «буклет», должны начинаться с нижнего регистра, иначе Python путает его с именами классов и именами файлов.
Очевидно, это была не ваша проблема, но ответ Джона Фухи очень хороший, и в этой ветке есть почти все, что может вызвать эту проблему. Итак, это еще одна вещь, и я надеюсь, что, возможно, это могло бы помочь другим.
источник
В моем случае я указывал путь к папке package.egg, а не фактический пакет внизу. Я скопировал пакет на верхний уровень, и он работал.
источник
Это сработало для меня: созданный
__init__.py
файл внутри родительской папки (в вашем случае, внутриsite-packages
папки). И импортируется так:Надеюсь, это будет полезно и вам!
источник
В linux server попробуй
dos2unix script_name
(удалить все (если есть)
pyc
файлы командойfind . -name '*.pyc' -delete
)и снова запустите в случае, если вы работали над сценарием на Windows
источник
В моем случае я использовал
sys.path.insert()
для импорта локальный модуль и получалmodule not found
из другой библиотеки. Я должен был поставитьsys.path.insert()
ниже импорта, который сообщилmodule not found
. Я полагаю, что лучшая практика заключается в том, чтобы поставитьsys.path.insert()
в нижней части вашего импорта.источник