Masalah referensi yang tidak terselesaikan di PyCharm


373

Saya memiliki struktur direktori

├── simulate.py
├── src
   ├── networkAlgorithm.py
   ├── ...

Dan saya dapat mengakses modul jaringan dengan sys.path.insert().

import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *

Namun, pycharm mengeluh bahwa ia tidak dapat mengakses modul. Bagaimana saya bisa mengajarkan pycham untuk menyelesaikan referensi?

masukkan deskripsi gambar di sini


4
Apakah folder src memiliki __init__.pyfile?
Puffin GDI

@Puffin GDI: Tidak, tidak.
prosseek

5
@PuffinGDI Apakah folder src memerlukan file init .py ini?
Jack Chi

Ya agar python dapat mengidentifikasi paket: stackoverflow.com/questions/42094723/…
rnoodle

Saya mengganti nama nama kelas dan terus mengerjakannya. Ketika saya tekan run, ada kesalahan ini, benar-benar lupa mengganti nama dan mencoba mencari saran pycharm selama impor. Sial, saran sangat sensitif! - Baru mengenal python !!
Vignesh Paramasivam

Jawaban:


817

Menambahkan secara manual seperti yang telah Anda lakukan memang merupakan salah satu cara untuk melakukan ini, tetapi ada metode yang lebih sederhana, dan itu adalah dengan hanya memberi tahu pycharm bahwa Anda ingin menambahkan srcfolder sebagai root sumber, dan kemudian menambahkan source root ke python Anda jalan.

Dengan cara ini, Anda tidak perlu menyulitkan hal-hal dalam pengaturan juru bahasa Anda:

  • Tambahkan srcsebagai root konten sumber:

                            masukkan deskripsi gambar di sini

  • Kemudian pastikan untuk menambahkan menambahkan sumber ke PYTHONPATH:

masukkan deskripsi gambar di sini

  • Sekarang impor akan diselesaikan:

                      masukkan deskripsi gambar di sini

Dengan cara ini, Anda dapat menambahkan apa pun yang Anda inginkan sebagai root sumber, dan semuanya akan berjalan dengan baik. Jika Anda tidak menandainya sebagai root sumber, Anda akan mendapatkan kesalahan:

                                  masukkan deskripsi gambar di sini

Setelah semua ini jangan lupa restart. Dalam menu PyCharm pilih: File -> Cache / Restart tidak valid


17
Ini juga berfungsi jika Anda menggunakan plugin Python dengan IntelliJ.
rob mayoff

13
Solusi ini berfungsi. Masalahnya adalah ketika programmer lain mengambil kode dari svn, dia harus melakukan pengaturan yang sama lagi untuk menghilangkan prompt kesalahan "referensi yang belum terselesaikan".
Ben Lin

2
@GamesBrainiac, solusinya adalah IDE dapat mengurai "sys.path.insert (0," ./src ")" menambahkannya ke PYTHONPATH untuk file khusus ini, kemudian berikan analisis sintaksis yang tepat.
Ben Lin

2
Anda juga perlu memastikan jalur root konten Anda sudah benar. Di pycharm 5 Anda dapat menemukan ini di Preferensi -> Proyek -> Struktur Proyek.
lps

1
Anehnya, sub-direktori tidak diperhitungkan. Misalnya, jika di bawah src, kami memiliki viewsfolder di dalamnya yang saya miliki myview.py, saya masih menerima kesalahan referensi yang belum terselesaikan ketika mencoba from src.views.myview import <my_function>...
SexyBeast

49
  1. periksa __init__.pyfile dalam srcfolder
  2. tambahkan srcfolder sebagai root sumber
  3. Kemudian pastikan untuk menambahkan sumber add to your PYTHONPATH(lihat di atas)
  4. dalam menu PyCharm pilih: File -> Cache / Restart tidak valid

11
Langkah terakhir ini adalah satu-satunya hal yang hilang dalam solusi saya. Jawaban yang diterima mungkin menambahkan ini ke dalamnya.
aimbire

tanpa langkah terakhir yang disebutkan di sini, jawaban yang diterima tidak berfungsi. Jawaban yang diterima harus menambahkan langkah ini juga /
santhosh kumar

23

Jika ada yang masih melihat ini, jawaban yang diterima masih berfungsi untuk PyCharm 2016.3 ketika saya mencobanya. UI mungkin telah berubah, tetapi opsinya masih sama.

yaitu. Klik kanan pada folder root Anda -> 'Tandai Direktori Sebagai' -> Sumber Root


1
Begitu banyak jawaban kompleks dalam diskusi ini. Solusi yang disajikan di sini sangat membantu saya.

16

Setelah menguji semua solusi, saya sarankan Anda untuk melihat Settings -> Project -> project dependenciesdan mengaturnya kembali.

pycharm prefrence


Ini bekerja dengan baik untuk saya. Saya telah menginstal di pygamesana dan tidak ada lagi masalah referensi yang tidak terselesaikan!
Michal Przybylowicz


5

Secara umum, ini adalah masalah paket yang hilang, cukup tempatkan tanda sisipan di referensi yang belum terselesaikan dan tekan Alt+Enteruntuk mengungkapkan opsi, maka Anda harus tahu bagaimana menyelesaikannya.


4

Setelah mengikuti jawaban yang diterima, melakukan yang berikut memecahkannya untuk saya:

FileSettingsProject <your directory/project>Project Dependencies

Pilih direktori / proyek tempat file Anda yang memiliki impor yang belum terselesaikan berada dan centang kotak untuk memberi tahu Pycharm bahwa proyek itu tergantung pada proyek Anda yang lain.

Hirarki folder saya sedikit berbeda dari yang ada di pertanyaan. Milik saya seperti ini

├── MyDirectory  
     └── simulate.py  
├── src  
     ├── networkAlgorithm.py  
     ├── ...

Memberitahu Pycharm bahwa src tergantung pada MyDirectorypenyelesaian masalah untukku!


4

Meskipun semua jawaban sangat membantu, ada satu informasi kecil yang harus dijelaskan secara eksplisit:

  • Pada dasarnya, sebuah proyek dengan banyak direktori hirarkis berfungsi sebagai paket dengan beberapa atribut.
  • Untuk mengimpor Kelas buatan lokal yang dibuat khusus, kita perlu menavigasi ke direktori yang berisi .pyfile dan membuat file __init__.py(kosong) di sana.

Mengapa ini membantu adalah karena file ini diperlukan untuk membuat Python memperlakukan direktori sebagai berisi paket. Bersulang!


3

Instal melalui PyCharm (berfungsi dengan Edisi Komunitas). Buka Settings > Project > Project Interpreterlalu klik ikon + hijau pada tangkapan layar di bawah ini. Pada dialog 2 yang terbuka, masukkan nama paket dan klik tombol 'Instal Paket'.

masukkan deskripsi gambar di sini



1

Silakan periksa apakah Anda menggunakan penerjemah yang tepat seperti yang seharusnya. Saya mendapatkan kesalahan "referensi yang tidak terselesaikan 'Django'" untuk menyelesaikan masalah ini. Saya mengubah Project Interpreter (Diubah Python 3 menjadi Python 2.7) dari pengaturan proyek: Pilih Project, buka File -> Settings -> Project: -> Project Interpreter -> Brows dan Pilih versi atau Juru Bahasa yang benar (mis. /usr/bin/python2.7).


1

Dalam kasus saya masalahnya adalah saya menggunakan Virtual environmentyang tidak memiliki akses ke paket situs global. Dengan demikian, penerjemah tidak mengetahui paket yang baru diinstal.

Untuk mengatasi masalah, hanya mengedit atau menciptakan juru virtual Anda dan centang Inherit global site-packagespilihan.

masukkan deskripsi gambar di sini


Bukankah ini memiliki konsekuensi yang tidak diinginkan dan mengalahkan satu alasan untuk menggunakan lingkungan virtual? Yaitu, jika Anda membawa lingkungan itu ke suatu tempat dan paket-paket situs global itu diinstal, maka Anda dalam masalah. Itulah yang saya pikir.
theStud54


0

Dilakukan di PyCharm 2019.3.1 Klik kanan pada folder src Anda -> "Tandai Direktori sebagai" -> Klik-pada "Dikecualikan" dan folder src Anda harus berwarna biru.


-1

Pycharm menggunakan venv. Di konsol venv Anda harus menginstal paket secara eksplisit atau masuk settings -> project interpreter -> add interpreter -> inherit global site-packages.


-1

Dalam versi yang lebih baru dari pycharm Anda dapat melakukannya hanya dengan mengklik kanan pada direktori atau paket python dari mana Anda ingin mengimpor file, lalu klik pada 'Tandai Direktori Sebagai' -> 'Sumber Root'


-1

Cara termudah untuk memperbaikinya adalah dengan melakukan hal berikut di perangkat lunak pyCharm Anda:

Klik pada: File> Pengaturan> (Proyek: nama proyek Anda)> Project Interpreter>

kemudian klik ikon "+" di sebelah kanan untuk mencari paket yang Anda inginkan dan menginstalnya.

Nikmati coding !!!


1
Selamat datang di Stack Overflow, dan terima kasih atas jawaban Anda. Meskipun ini mungkin benar, di masa depan harap hindari memposting gambar atau tautan ke situs lain tanpa konteks atau rincian lebih lanjut. Tautan mungkin berhenti berfungsi di beberapa titik, membuat jawaban ini kurang bermanfaat bagi pengguna lain.
CyberJacob

@CyberJacob Terima kasih banyak, dan terima kasih banyak atas saran Anda, saya telah mengedit jawabannya dengan menghapus gambar dan menambahkan teks sebagai gantinya.
zaid.mohammed
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.