Masalah Impor yang Belum Terselesaikan dengan PyDev dan Eclipse

108

Saya sangat baru mengenal PyDev dan Python, meskipun saya telah banyak menggunakan Eclipse untuk Java. Saya mencoba untuk mengerjakan beberapa contoh Dive Into Python dan ini terasa seperti masalah yang sangat sepele yang menjadi sangat mengganggu. Saya menggunakan Ubuntu Linux 10.04.

Saya ingin dapat menggunakan file odbchelper.py, yang terletak di direktori /Desktop/Python_Tutorials/diveintopython/py

Ini adalah file example.py saya yang saya kerjakan di proyek PyDev / Eclipse saya:

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

Ini berfungsi dengan baik, tetapi kemudian saya ingin baris berikutnya dari kode saya menjadi:

import odbchelper

dan ini menyebabkan kesalahan impor yang tidak terselesaikan setiap saat. Saya telah menambahkan __init__.pyfile ke hampir setiap direktori yang mungkin dan itu tidak membantu apa pun. Saya telah mencoba menambahkan __init__.pyfile satu per satu ke berbagai tingkat direktori antara lokasi proyek dan file odbchelper.py, dan saya juga mencoba menambahkan __init__.pyfile ke semua direktori di antaranya secara bersamaan. Tidak ada yang berhasil.

Yang ingin saya lakukan adalah memiliki proyek di suatu tempat di direktori lain, katakanlah /Desktop/MyStuff/Project, di mana saya memiliki example.py ... dan kemudian dari example.py saya ingin mengimpor odbchelper.py dari/Desktop/Python_Tutorials/diveintopython/py/

Setiap tanggapan papan pesan yang dapat saya temukan hanya mengatakan untuk menggunakan sys.path.append()fungsi untuk menambahkan direktori ini ke jalur saya, dan kemudian mengimpornya ... tetapi justru itulah yang saya lakukan dalam kode saya dan itu tidak berfungsi.

Saya juga telah mencoba Ctrl- 1trik untuk menekan pesan kesalahan, tetapi program tersebut masih belum berfungsi dengan benar. Saya mendapatkan kesalahan ImportError: No module named odbchelper,. Jadi jelas tidak mendapatkan jalur yang ditambahkan, atau ada beberapa masalah yang semua permutasi saya untuk menambahkan __init__.pyfile tidak terjawab.

Sangat membuat frustasi bahwa sesuatu yang sederhana ini ... memanggil sesuatu dari beberapa file yang ada di tempat lain di mesin saya ... membutuhkan banyak usaha.

ely
sumber
Pastikan kapitalisasi (kapitalisasi) sudah benar untuk semua direktori yang diperlukan di PYTHONPATH Anda.
Cam Jackson
Saya tahu ini telah dijawab, tetapi saya mendapatkan impor grpmodul yang belum terselesaikan . Saya baru saja menambahkannya ke builtinsdaftar di Preferences> PyDev> Interpreters> Python> Forced Builtins dan masih mendapatkan autocompletion untuk modul itu
user1040495

Jawaban:

132

Di properti untuk proyek pydev Anda, ada panel yang disebut "PyDev - PYTHONPATH", dengan sub-panel yang disebut "Perpustakaan Eksternal". Anda dapat menambahkan folder sumber (folder apa pun yang memiliki __init__.py) ke jalur menggunakan panel itu. Kode proyek Anda kemudian dapat mengimpor modul dari folder sumber tersebut.

David German
sumber
4
Jika Anda mengatur properti pydev dengan benar, Anda tidak perlu repotsys.path
Velociraptors
6
Untuk pencari lain, saya ingin menambahkan pengalaman saya -Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (Untuk Python 2.7 amd64). Instalasi Psychopg pergi ke C: \ Python27 \ Lib \ site-packages \ psycopg2 (di bawah instalasi Python 2.7). Saya pertama kali mereferensikan folder itu dan semua folder anak dengan init .py, tetapi ternyata saya harus mereferensikan folder site_packages juga. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
Jeff Maass
86
Satu hal lagi yang perlu diperhatikan - Eclipse mungkin perlu dimulai ulang agar ini berfungsi. Ini sepertinya hanya bekerja melalui "File -> Restart" dan bukan dengan menutup dan membuka kembali secara manual.
soulBit
18
Catatan penting: Saya telah menemukan bahwa juru Auto Config menambahkan C:\Python27\lib\site-packages, tapi di komputer saya, folder lib adalah dikapitalisasi: C:\Python27\Lib\site-packages. Mengganti entri huruf kecil dengan huruf besar, dan kemudian File-> Mulai ulang memperbaiki masalah untuk saya. Harapan yang membantu orang lain di luar sana :)
Cam Jackson
10
@soulBit Saya berharap saya dapat memberikan jempol pada komentar itu sebanyak 20 kali, saya telah menghabiskan satu jam yang baik untuk mencoba mencari tahu mengapa impor saya masih belum terselesaikan. Terima kasih
Matt Dodge
51

Saya menggunakan eclipse kepler 4.3, PyDev 3.9.2 dan di ubuntu 14.04 saya, saya mengalami masalah yang sama. Saya mencoba dan menghabiskan waktu berjam-jam, dengan semua pilihan di atas tetapi sia-sia. Kemudian saya mencoba yang berikut ini yang bagus:

  • Pilih Proyek -> Klik Kanan-> PyDev -> Hapus Konfigurasi Proyek PyDev
  • file-> restart

Dan saya menggunakan Python 2.7 sebagai penerjemah, meskipun tidak berpengaruh, menurut saya.

BitByte_Bake
sumber
5
Tidak perlu me-restart Eclipse, cukup tutup dan buka kembali file. Ini juga bekerja pada Windows dengan Eclipse Luna, Terima kasih!
Noam Manos
Saya harus memulai ulang Eclipse dua kali untuk menghilangkan peringatan. Terima kasih
Vladimir S.
Bekerja dengan Python 3.7 juga. Ini harus menjadi solusi untuk pertanyaan ini.
SPRBRN
Saya mencoba ini dan sekarang saya tidak dapat memulai server DEV saya. Bagaimana cara mengganti file?
Lee Loftiss
@ BitByty-Bake apa penyebab utamanya?
ankostis
42

Saya baru saja mengupgrade proyek WXWindows ke Python 2.7 dan tidak menemui kesulitan untuk membuat Pydev mengenali interpreter baru tersebut. Melakukan hal yang sama seperti di atas mengonfigurasi penerjemah, membuat instalasi baru Eclipse dan Pydev. Saya pikir beberapa bagian python pasti rusak, jadi saya menginstal ulang semuanya lagi. Arghh! Menutup dan membuka kembali proyek, dan memulai ulang Eclipse di antara semua perubahan ini.

AKHIRNYA memperhatikan Anda dapat 'menghapus konfigurasi proyek PyDev' dengan mengklik kanan pada proyek. Kemudian bisa dibuat menjadi proyek PyDev lagi, sekarang bagus seperti emas!

Paul
sumber
Ya, menutup dan membuka kembali proyek untuk menyingkirkan pesan ImportError yang mengganggu itu
somnathchakrabarti
17

Saya memperbaiki pythonpath saya dan semuanya keren ketika saya mengimpor barang melalui konsol, tetapi semua impor yang belum terselesaikan ini masih ditandai sebagai kesalahan dalam kode saya, tidak peduli berapa kali saya memulai ulang gerhana atau menyegarkan / membersihkan proyek.

Saya mengklik kanan proyek-> Pydev-> Hapus penanda kesalahan dan itu menyingkirkan masalah itu. Jangan khawatir, jika kode Anda mengandung kesalahan yang sebenarnya, mereka akan ditandai ulang.

Martin
sumber
Ini bekerja dengan baik menggunakan liclipse dengan odoo 10. Terima kasih!
Didierh
11

proyek -> properti -> pydev-pythonpath -> perpustakaan eksternal -> tambahkan folder sumber, tambahkan FOLDER ORANG TUA proyek. Kemudian mulai ulang gerhana.

zhaokongsheng
sumber
2
Nah, inilah yang memperbaiki masalah saya.
Simon Hayward
Tidak perlu restart cukup tutup dan buka kembali file tersebut. Perbaiki untuk saya!
Jerther
4

Inilah yang berhasil untuk saya (disarankan oleh soulBit):

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

Ini adalah solusi paling sederhana yang pernah ada dan sepenuhnya menghilangkan hal yang mengganggu.

Brana
sumber
1

Ada dua cara untuk menyelesaikan masalah ini:

  • Hapus interpreter Python dari "interpreter Python" dan tambahkan lagi.
  • Atau cukup tambahkan folder dengan perpustakaan di penerjemah yang Anda gunakan dalam proyek Anda, dalam kasus saya, saya menggunakan "botol" dan folder yang saya tambahkan adalah "c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6 -py3.3.egg "

Sekarang saya tidak melihat kesalahan lagi, dan fitur penyelesaian kode bekerja dengan baik dengan "botol".

PachinSV
sumber
1

Saya menjalankan Eclipse 4.2.0 (Juno) dan PyDev 2.8.1, dan mengalami masalah ini dengan lib yang diinstal ke jalur paket situs saya. Menurut pertanyaan SO ini:

File Pydev dan * .pyc

... ada masalah dengan file PyDev dan pyc. Dalam kasus lib tertentu yang saya coba rujuk, semua yang dikirimkan adalah file pyc.

Inilah yang saya lakukan untuk mengatasi ini:

  1. Instal uncompyle2 dari https://github.com/Mysterie/uncompyle2
  2. Jalankan uncompyle2 terhadap file * .pyc di paket situs lib. Contoh:

    uncompyle2 -r -o / tmp / path / ke / situs-paket / lib

  3. Ubah nama file * .pyc_dis yang dihasilkan dari uncompyle2 menjadi * .py
  4. Pindahkan / salin file * .py ini ke jalur paket situs
  5. Di Eclipse, pilih File> Mulai Ulang

Kesalahan impor yang belum terselesaikan terkait dengan file .pyc sekarang akan hilang.

Komunitas
sumber
0

Berikut, menurut saya akan menyelesaikan masalah

  1. Menambahkan init .py ke folder "~ / Desktop / Python_Tutorials / diveintopython / py" Anda
  2. Pergi ke Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter untuk menghapus pengaturan Python Interpreter Anda (alasannya adalah karena PyDev tidak dapat melakukan refresh otomatis setiap update yang dibuat ke Sistem PythonPath)
  3. Tambahkan Interpreter dengan detail yang sama seperti sebelumnya (ini akan menyegarkan pengaturan Python Interpreter Anda dengan pembaruan yang dibuat untuk PythonPath Anda)
  4. Akhirnya karena folder "~ / Desktop / Python_Tutorials / diveintopython / py" Anda bukan PythonPath standar, Anda harus menambahkannya. Ada dua cara untuk melakukannya

Sebuah. Sesuai saran David German. Namun ini hanya berlaku untuk proyek tertentu di mana Anda berada b. Tambahkan "~ / Desktop / Python_Tutorials / diveintopython / py" ke dalam PythonPath baru di bawah Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter -> Libraries subtab -> NewFolder

Semoga membantu.

Ridwan Kurniawan
sumber
0

Saya mengalami beberapa masalah saat mengimpor pustaka tambahan, setelah mencoba menyelesaikan masalah, dengan memahami PYTHONPATH, Penerjemah, dan Tata Bahasa, saya menemukan bahwa saya melakukan semuanya menulis tetapi masalah terus berlanjut. Setelah itu, saya hanya menambahkan baris kosong baru di file yang mengalami kesalahan impor dan menyimpannya dan kesalahan itu teratasi .

Miguel FMoreira
sumber
-1
KD.py

class A:
a=10;

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

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

INI berfungsi dengan sempurna untuk saya

Contoh lainnya adalah

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 Oleh Kiran
sumber
Harap pertimbangkan untuk memisahkan nama file dan kode. Dan Anda juga perlu memperbaiki beberapa indentasi.
dkato