Нерешенные проблемы импорта с PyDev и Eclipse

108

Я новичок в PyDev и Python, хотя много использовал Eclipse для Java. Я пытаюсь проработать некоторые из примеров Dive Into Python, и это кажется чрезвычайно тривиальной проблемой, которая становится чрезвычайно раздражающей. Я использую Ubuntu Linux 10.04.

Я хочу иметь возможность использовать файл odbchelper.py, который находится в каталоге /Desktop/Python_Tutorials/diveintopython/py

Вот мой файл example.py, над которым я работаю в своем проекте PyDev / Eclipse:

import sys
sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py")

Это отлично работает, но тогда я хочу, чтобы следующая строка моего кода была:

import odbchelper

и это каждый раз вызывает неразрешенную ошибку импорта. Я добавил __init__.pyфайлы почти в каждый возможный каталог, и это ни к чему не помогает. Я пробовал добавлять __init__.pyфайлы по одному на разные уровни каталогов между местоположением проекта и файлом odbchelper.py, а также пытался одновременно добавлять __init__.pyфайлы во все каталоги между ними. Ни то, ни другое не работает.

Все, что я хочу сделать, это создать проект где-нибудь в другом каталоге, скажем /Desktop/MyStuff/Project, в котором у меня есть example.py ... а затем из example.py я хочу импортировать odbchelper.py из/Desktop/Python_Tutorials/diveintopython/py/

В каждом ответе на доске сообщений я могу найти просто предложение использовать sys.path.append()функцию для добавления этого каталога к моему пути, а затем его импорта ... но это именно то, что я делаю в своем коде, и он не работает.

Я также попробовал Ctrl- 1трюк , чтобы подавить сообщение об ошибке, но программа все еще не функционирует правильно. Я получаю сообщение об ошибке ImportError: No module named odbchelper. Таким образом, очевидно, что путь не добавляется, или есть какая-то проблема, которую __init__.pyпропустили все мои многочисленные перестановки добавления файлов.

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

Эли
источник
Убедитесь, что регистр (заглавные буквы) правильный для всех необходимых каталогов в вашем PYTHONPATH.
Кэм Джексон
Я знаю, что на этот вопрос уже был дан ответ, но я получал неразрешенный импорт для grpмодуля. Я просто добавил его в builtinsсписок в Preferences> PyDev> Interpreters> Python> Forced Builtins и по-прежнему получаю автозаполнение для этого модуля
user1040495

Ответы:

132

В свойствах вашего проекта pydev есть панель под названием «PyDev - PYTHONPATH» с подпанелью «Внешние библиотеки». Вы можете добавить исходные папки (любую папку, у которой есть __init__.py) к пути с помощью этой панели. После этого код вашего проекта сможет импортировать модули из этих исходных папок.

Дэвид Герман
источник
4
Если вы правильно настроили свойства pydev, вам не нужно возитьсяsys.path
Velociraptors
6
Для других искателей я хотел добавить свой опыт - Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (для Python 2.7 amd64). Psychopg был установлен в папку C: \ Python27 \ Lib \ site-packages \ psycopg2 (под установкой Python 2.7). Сначала я сослался на эту папку и все дочерние папки с помощью init .py, но обнаружил, что мне также нужно ссылаться на папку site_packages. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
Джефф Маасс
86
Еще одно замечание: может потребоваться перезапуск Eclipse, чтобы это работало. Кажется, это работает только через «Файл -> Перезагрузить», а не путем закрытия и повторного открытия вручную.
soulBit
18
Важное примечание: Я обнаружил , что интерпретатор Auto Config добавляет C:\Python27\lib\site-packages, но на моем компьютере, папка Lib капитализируются: C:\Python27\Lib\site-packages. Замена строчной записи на верхний регистр, а затем File-> Restart устранила проблему для меня. Надеюсь, это поможет кому-то еще :)
Кэм Джексон
10
@soulBit Я бы хотел поставить отметку "Нравится", что прокомментировал 20 раз, я потратил хороший час, пытаясь выяснить, почему мой импорт все еще не решен. Спасибо
Мэтт Додж
51

Я использую eclipse kepler 4.3, PyDev 3.9.2, и на моем ubuntu 14.04 я столкнулся с той же проблемой. Я пробовал и потратил часы, используя все перечисленные выше варианты, но тщетно. Затем я попробовал следующее, и это было здорово:

  • Выберите Project -> RightClick-> PyDev -> Удалить конфигурацию проекта PyDev.
  • файл-> перезапустить

И я использовал Python 2.7 в качестве интерпретатора, хотя, я думаю, это не влияет.

BitByte_Bake
источник
5
Не нужно перезапускать Eclipse, просто закройте и снова откройте файл. Он также работал в Windows с Eclipse Luna, спасибо!
Ноам Манос,
Мне пришлось перезапустить Eclipse два раза, чтобы предупреждения исчезли. Спасибо
Владимир С.
Также работает с Python 3.7. Это должно быть решением этого вопроса.
SPRBRN
Я попробовал это и теперь не могу запустить свой сервер DEV. Как мне заменить файл?
Ли Лофтисс
@ BitByty-Bake какова основная причина?
ankostis
42

Я только что обновил проект WXWindows до Python 2.7, и у меня не было проблем с тем, чтобы Pydev распознал новый интерпретатор. Сделал то же, что и выше, с настройкой интерпретатора, сделал новую установку Eclipse и Pydev. Думал, что какая-то часть python была повреждена, поэтому я снова установил все заново. Ах! Закрыл и снова открыл проект и перезапустил Eclipse между всеми этими изменениями.

НАКОНЕЦ заметил, что вы можете «удалить конфигурацию проекта PyDev», щелкнув правой кнопкой мыши по проекту. Потом его снова можно превратить в проект PyDev, теперь он хорош как золото!

Павел
источник
Да, закрыл и снова открыл проект, чтобы избавиться от тревожных сообщений
ImportError
17

Я исправил свой путь к python, и все было шикарно, когда я импортировал файлы через консоль, но все эти ранее неразрешенные операции импорта по-прежнему помечались как ошибки в моем коде, независимо от того, сколько раз я перезапускал eclipse или обновлял / очищал проект.

Я щелкнул правой кнопкой мыши проект-> Pydev-> Удалить маркеры ошибок, и это избавило от этой проблемы. Не волнуйтесь, если ваш код содержит реальные ошибки, они будут помечены заново.

Мартин
источник
Это отлично работает при использовании liclipse с odoo 10. Спасибо!
Didierh
11

проект -> свойства -> pydev-pythonpath -> внешние библиотеки -> добавить исходную папку, добавить PARENT FOLDER проекта. Затем перезапустите eclipse.

Чжаокуншэн
источник
2
Что ж, это был тот, который решил мою проблему.
Саймон Хейворд,
Нет необходимости перезагружать, просто закройте и снова откройте файл. Исправлено для меня!
Jerther 01
4

Вот что сработало для меня (предложено soulBit):

1) Restart using restart from the file menu
2) Once it started again, manually close and open it.

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

Брана
источник
1

Есть два пути решения этой проблемы:

  • Удалите интерпретатор Python из «Интерпретаторов Python» и добавьте его снова.
  • Или просто добавьте папку с библиотеками в интерпретатор, который вы используете в своем проекте, в моем случае я использовал «бутылку», а добавленная мной папка была «c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6». -py3.3.egg "

Теперь я больше не вижу ошибки, и функция автозавершения кода также работает с «бутылкой».

PachinSV
источник
1

Я запускаю Eclipse 4.2.0 (Juno) и PyDev 2.8.1 и столкнулся с этой проблемой с библиотекой, установленной на моем пути к пакетам сайтов. Согласно этому вопросу SO:

Файлы Pydev и * .pyc

... есть проблема с файлами PyDev и pyc. В случае конкретной библиотеки, на которую я пытался сослаться, все, что доставляется, - это файлы pyc.

Вот что я сделал, чтобы решить эту проблему:

  1. Установите uncompyle2 с https://github.com/Mysterie/uncompyle2
  2. Запустите uncompyle2 для файлов * .pyc в lib site-packages. Пример:

    uncompyle2 -r -o / tmp / путь / к / сайт-пакеты / lib

  3. Переименуйте полученные файлы * .pyc_dis, созданные из uncompyle2, в * .py
  4. Переместите / скопируйте эти * .py файлы в путь site-packages
  5. В Eclipse выберите File> Restart

Неразрешенная ошибка импорта, относящаяся к файлам .pyc, теперь должна исчезнуть.

Сообщество
источник
0

Следующее, на мой взгляд, решит проблему

  1. Добавление init .py в папку "~ / Desktop / Python_Tutorials / diveintopython / py"
  2. Перейдите в Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter, чтобы удалить настройку Python Interpreter (причина в том, что PyDev не может автоматически обновлять любые обновления, сделанные для любой системы PythonPath)
  3. Добавьте интерпретатор с теми же данными, что и раньше (это обновит настройки Python Interpreter с обновлениями, внесенными в ваш PythonPath)
  4. Наконец, поскольку ваша папка «~ / Desktop / Python_Tutorials / diveintopython / py» не является стандартным PythonPath, вам нужно будет добавить ее. Есть два способа сделать это

а. Согласно тому, что предложил Дэвид Герман. Однако это применимо только к конкретным проектам, в которых вы находитесь. B. Добавьте "~ / Desktop / Python_Tutorials / diveintopython / py" в новый PythonPath в разделе Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter -> вложенная вкладка Libraries -> NewFolder

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

Ридван Курниаван
источник
0

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

Мигель Фморейра
источник
-1
KD.py

class A:
a=10;

KD2.py 
from com.jbk.KD import A;
class B:
  b=120;

aa=A();
print(aa.a)

ЭТО отлично работает файл для меня

Другой пример

main.py
=======
from com.jbk.scenarios.objectcreation.settings import _init
from com.jbk.scenarios.objectcreation.subfile import stuff

_init();
stuff();

settings.py
==========
def _init():
print("kiran")


subfile.py
==========
def stuff():
print("asasas")    
Java Автор Kiran
источник
Пожалуйста, рассмотрите возможность разделения имен файлов и кодов. И еще нужно исправить некоторые отступы.
dkato