Нерешенные проблемы импорта с PyDev и Eclipse - PullRequest
106 голосов
/ 08 января 2011

Я очень новичок в 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 файлов пропустили.

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

Ответы [ 10 ]

129 голосов
/ 08 января 2011

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

46 голосов
/ 30 марта 2015

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

  • Выбрать Проект -> RightClick-> PyDev -> Удалить конфигурацию PyDev Project
  • file-> restart

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

42 голосов
/ 01 июня 2011

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

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

17 голосов
/ 04 декабря 2012

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

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

10 голосов
/ 25 марта 2014

проект -> свойства -> pydev-pythonpath -> внешние библиотеки -> добавить исходную папку, добавьте ПАРОДУ ПАРОДУ проектаЗатем перезапустите затмение.

4 голосов
/ 13 июня 2014

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

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

Это самое простое решение из всех, и оно полностью устраняет раздражающую вещь.

1 голос
/ 03 сентября 2013

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

Файлы Pydev и * .pyc

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

Вот что я сделал для решения этой проблемы:

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

    uncompyle2 -r -o / tmp / path / to / site-packages / lib

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

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

1 голос
/ 05 июля 2013

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

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

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

0 голосов
/ 25 января 2018
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")    
0 голосов
/ 05 октября 2014

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

  1. Добавление init .py в вашу папку "~ / Desktop / Python_Tutorials / diveintopython / py"
  2. Перейдите в Окно -> Настройки -> PyDev -> Интерпретаторы -> Интерпретатор Python, чтобы удалить настройку Интерпретатора Python (причина в том, что PyDev не может автоматически обновлять любые обновления, сделанные для любого системного PythonPath)
  3. Добавьте в Интерпретатор те же данные, что и раньше (это обновит настройку Интерпретатора Python с помощью обновлений, внесенных в ваш PythonPath)
  4. Наконец, поскольку ваша папка "~ / Desktop / Python_Tutorials / diveintopython / py" не является стандартным PythonPath, вам нужно будет добавить ее. Существует два способа сделать это

а. Согласно тому, что предложил Дэвид Джерман. Однако это применимо только к конкретным проектам, в которых вы находитесь. б. Добавьте «~ / Desktop / Python_Tutorials / diveintopython / py» в новый PythonPath в разделе «Окно» -> «Настройки» -> «PyDev» -> «Интерпретаторы» -> «Интерпретатор Python» -> вложенная библиотека -> «NewFolder»

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

...