PyDev ve Eclipse ile Çözülmemiş İçe Aktarma Sorunları


108

PyDev ve Python'da çok yeniyim, ancak Eclipse'i Java için bolca kullandım. Dive Into Python örneklerinden bazılarını incelemeye çalışıyorum ve bu, son derece can sıkıcı hale gelen son derece önemsiz bir problem gibi geliyor. Ubuntu Linux 10.04 kullanıyorum.

Dizinde bulunan odbchelper.py dosyasını kullanabilmek istiyorum /Desktop/Python_Tutorials/diveintopython/py

İşte PyDev / Eclipse projemde üzerinde çalıştığım example.py dosyam:

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

Bu iyi çalışıyor, ancak kodumun sonraki satırının şöyle olmasını istiyorum:

import odbchelper

ve bu her seferinde çözülmemiş bir içe aktarma hatasına neden olur. __init__.pyDosyaları hemen hemen her dizine ekledim ve hiçbir şeye yardımcı olmuyor. Ben ekleyerek denedim __init__.pyproje konumu ve odbchelper.py dosya arasında dizinleri çeşitli düzeylerde için bir kerede dosyaları tek ve ben de ekleyerek denedim __init__.pyaynı anda aradaki dizinleri tüm dosyaları. Hiçbiri işe yaramıyor.

Tek yapmak istediğim, başka bir dizinde, örneğin /Desktop/MyStuff/Projectornek.py'ye sahip olduğum bir projeye sahip olmak ... ve sonra example.py'den odbchelper.py'yi içe aktarmak istiyorum/Desktop/Python_Tutorials/diveintopython/py/

Her mesaj panosu yanıtı, sys.path.append()bu dizini yoluma eklemek için işlevi kullanmam gerektiğini söyleyerek bulabiliyorum ve sonra onu içeri aktarıyorum ... ama tam olarak kodumda yaptığım şey bu ve çalışmıyor.

Hata mesajını bastırmak için Ctrl- 1hileyi de denedim , ancak program hala düzgün çalışmıyor. Bir hata alıyorum ImportError: No module named odbchelper. Yani açıkça yol eklenemiyor ya da __init__.pydosya ekleme konusundaki birçok permütasyonumun tamamının gözden kaçırdığı bir problem var .

Bu kadar basit bir şeyin ... makinemde başka bir yerde bulunan bir dosyadan çağırmak ... bu kadar çaba gerektirmesi çok sinir bozucu.


PYTHONPATH'ınızdaki gerekli tüm dizinler için büyük / küçük harf kullanımının doğru olduğundan emin olun.
Cam Jackson

Bunun zaten yanıtlandığını biliyorum, ancak grpmodül için çözümlenmemiş içe aktarma alıyordum . Bunu builtinsTercihler> PyDev> Tercümanlar> Python> Zorunlu Yerleşikler'deki listeye ekledim ve hala bu modül için otomatik tamamlama
alıyorum

Yanıtlar:


132

Pydev projenizin özelliklerinde, "Harici Kitaplıklar" adlı bir alt bölmenin olduğu "PyDev - PYTHONPATH" adlı bir bölme vardır. Bu __init__.pybölmeyi kullanarak yola kaynak klasörler (herhangi bir klasör ) ekleyebilirsiniz. Proje kodunuz daha sonra bu kaynak klasörlerden modülleri içe aktarabilecektir.


4
Pydev özelliklerini doğru ayarlarsanız, uğraşmanıza gerek kalmazsys.path
Velociraptors

6
Diğer arama yapanlar için deneyimimi eklemek istedim - Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (Python 2.7 amd64 için). Psychopg kurulumu C: \ Python27 \ Lib \ site-packages \ psycopg2'ye (Python 2.7 kurulumu altında) gitti. İlk önce bu klasöre ve tüm alt klasörlere init .py ile başvurdum, ancak site_packages klasörüne de başvurmam gerektiğini fark ettim. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
Jeff Maass

86
Unutulmaması gereken bir diğer nokta - Bunun çalışması için Eclipse'in yeniden başlatılması gerekebilir. Bu sadece "Dosya -> Yeniden Başlat" yoluyla çalışıyor gibi görünüyor, elle kapatıp yeniden açarak değil.
soulBit

18
Önemli not: Ben tercüman Otomatik Yapılandırma ekler olduğunu tespit ettik C:\Python27\lib\site-packages, ama benim bilgisayarda, lib klasöründe harfle geçerli: C:\Python27\Lib\site-packages. Küçük harf girişini büyük harfle değiştirmek ve ardından Dosya-> Yeniden Başlat sorunu benim için çözdü. Umarım dışarıda başka birine yardımcı olur :)
Cam Jackson

10
@soulBit Keşke bu yorumu 20 kez beğenebilseydim, ithalatımın neden hala çözülmediğini anlamaya çalışırken iyi bir saat geçirdim. Teşekkürler
Matt Dodge

51

Eclipse kepler 4.3, PyDev 3.9.2 kullanıyorum ve ubuntu 14.04'te aynı problemle karşılaştım. Yukarıdaki seçeneklerin çoğuyla, ancak boşuna saatler harcadım. Sonra harika olan aşağıdakileri denedim:

  • Seç Projesi -> RightClick-> Pydev -> Kaldır Pydev Projesi Yapılandırma
  • dosya-> yeniden başlat

Python 2.7'yi yorumlayıcı olarak kullanıyordum, ancak etkisi olmasa da sanırım.


5
Eclipse'i yeniden başlatmanıza gerek yok, dosyayı kapatıp yeniden açın. Ayrıca Eclipse Luna ile Windows üzerinde de çalıştı, Teşekkürler!
Noam Manos

Uyarıların ortadan kalkması için Eclipse'i iki kez yeniden başlatmam gerekti. Teşekkürler
Vladimir S.

Python 3.7 ile de çalışır. Bu sorunun çözümü bu olmalı.
SPRBRN

Bunu denedim ve şimdi DEV sunucumu başlatamıyorum. Dosyayı nasıl değiştiririm?
Lee Loftiss

@ BitByty-Bake temel neden nedir?
ankostis

42

Az önce bir WXWindows projesini Python 2.7'ye yükselttim ve Pydev'in yeni tercümanı tanımasını sağlamakta hiç sorun yaşamadım. Yorumlayıcıyı yapılandırırken yukarıdakiyle aynı şeyi yaptım, Eclipse ve Pydev'in yeni bir kurulumunu yaptım. Python'un bir kısmının bozuk olması gerektiğini düşündüm, bu yüzden her şeyi yeniden kurdum. Arghh! Projeyi kapatıp yeniden açtı ve tüm bu değişiklikler arasında Eclipse'i yeniden başlattı.

SONUNDA, projeye sağ tıklayarak 'PyDev proje yapılandırmasını kaldırabileceğinizi' fark ettiniz. O zaman tekrar bir PyDev projesine dönüştürülebilir, şimdi altın kadar iyi!


Evet, rahatsız edici ImportError mesajlarından kurtulmak için projeyi kapatıp yeniden açtı
somnathchakrabarti

17

Python yolumu düzelttim ve konsoldan bir şeyler içe aktardığımda her şey düzgündü, ancak daha önce çözülmemiş tüm bu içe aktarmalar, tutulmayı kaç kez yeniden başlattığım veya projeyi yenilediğim / temizlediğim önemli değil, kodumda hala hata olarak işaretlendi.

Projeye sağ tıkladım-> Pydev-> Hata işaretlerini kaldır ve o problemden kurtuldu. Endişelenmeyin, kodunuz gerçek hatalar içeriyorsa, yeniden işaretlenecektir.


Bu, odoo 10 ile birlikte liclipse kullanıldığında sorunsuz çalışır. Teşekkürler!
Didierh

11

proje -> özellikler -> pydev-pythonpath -> harici kütüphaneler -> kaynak klasör ekleyin, projenin ANA KLASÖRÜ ekleyin. Ardından tutulmayı yeniden başlatın.


2
Sorunumu çözen şey buydu.
Simon Hayward

Yeniden başlatmaya gerek yok, sadece dosyayı kapatıp yeniden açın. Benim için düzelt!
Jerther

4

İşte benim için işe yarayan şey (soulBit tarafından öneriliyor):

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

Bu şimdiye kadarki en basit çözüm ve can sıkıcı şeyi tamamen ortadan kaldırıyor.


1

Bu sorunu çözmenin iki yolu vardır:

  • Python yorumlayıcısını "Python yorumlayıcılarından" silin ve tekrar ekleyin.
  • Ya da sadece projenizde kullandığınız yorumlayıcıdaki kütüphanelerin bulunduğu klasörü ekleyin, benim durumumda "bottle" kullanıyordum ve eklediğim klasör "c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6 -py3.3.egg"

Artık hatayı görmüyorum ve kod tamamlama özelliği "şişe" ile de çalışıyor.


1

Eclipse 4.2.0 (Juno) ve PyDev 2.8.1 çalıştırıyorum ve site paketleri yoluma yüklenen bir lib ile bu sorunla karşılaştım. Bu SO sorusuna göre:

Pydev ve * .pyc Dosyaları

... PyDev ve pyc dosyalarıyla ilgili bir sorun var. Başvurmaya çalıştığım belirli lib durumunda, teslim edilen tek şey pyc dosyalarıdır.

İşte bunu çözmek için yaptım:

  1. Https://github.com/Mysterie/uncompyle2 adresinden uncompyle2'yi yükleyin
  2. Uncompyle2'yi site paketleri kitaplığındaki * .pyc dosyalarına karşı çalıştırın. Misal:

    uncompyle2 -r -o / tmp / yol / site-paketleri / lib

  3. Uncompyle2'den üretilen * .pyc_dis dosyalarını * .py olarak yeniden adlandırın
  4. Bu * .py dosyalarını site paketleri yoluna taşı / kopyala
  5. Eclipse'de Dosya> Yeniden Başlat'ı seçin

.Pyc dosyalarıyla ilgili çözülmemiş içe aktarma hatası artık ortadan kalkmalıdır.


0

Bence takip etmek sorunu çözecek

  1. Ekleme init senin "~ / Masaüstü / Python_Tutorials / diveintopython / py" klasörüne .py
  2. Python Yorumlayıcı ayarınızı kaldırmak için Pencere -> Tercihler -> PyDev -> Yorumlayıcılar -> Python Yorumlayıcı'ya gidin (bunun nedeni PyDev'in herhangi bir Sistem PythonPath'e yapılan güncellemeleri otomatik olarak yenileyememesidir)
  3. Yorumlayıcıyı öncekiyle aynı ayrıntılarla ekleyin (bu, Python Yorumlayıcı ayarınızı PythonPath'inizde yapılan güncellemelerle yenileyecektir)
  4. Son olarak, "~ / Desktop / Python_Tutorials / diveintopython / py" klasörünüz standart bir PythonPath olmadığından, onu eklemeniz gerekecek. Bunu yapmanın iki yolu var

a. David German'ın önerdiği gibi. Ancak bu yalnızca içinde bulunduğunuz belirli projeler için geçerlidir. B. Pencere -> Tercihler -> PyDev -> Yorumlayıcılar -> Python Yorumlayıcı -> Kitaplıklar alt sekmesi -> YeniKlasör altında yeni bir PythonPath'e "~ / Desktop / Python_Tutorials / diveintopython / py" ekleyin

Umarım yardımcı olur.


0

PYTHONPATH, Interpreter ve Dilbilgisini anlayarak, sorunu çözmeye çalıştıktan sonra ek kitaplıkları içe aktarmada bazı sorunlar yaşadım, her şeyi yazdığımı ama sorunların devam ettiğini fark ettim. Bundan sonra , içe aktarma hataları olan ve bunları kaydeden dosyalara yeni bir boş satır ekledim ve hata çözüldü .


-1
KD.py

class A:
a=10;

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

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

BU benim için mükemmel çalışıyor

Başka bir örnek

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")    

Lütfen dosya adlarını ve kodları ayırmayı düşünün. Ayrıca bazı girintileri düzeltmeniz gerekir.
dkato
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.